javascript 父级在setState调用后未呈现某些子级

wko9yo5t  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(150)

我正在用React做一个简单的“餐厅”页面作为学习项目。我的代码如下:

function App() {

  const [section, setSection] = useState('Home')

  const sections = {
    home: () => {
      setSection('Home')
    },
    specials: () => {
      setSection('Specials')
    },
    menu: () => {
      setSection('Menu')
    },
    contact: () => {
      setSection('Contact')
    }
  }

    return <>
      <div className='appContainer'>
        <div className='navBar'>
          <Menu sections={sections}/>
        </div>
        <div className='content'>
          <div className='contentBg'>
            <Content currentSection={section}/>
          </div>
        </div>
      </div>
    </>;
}
  • sections* 是组件内部的按钮,OnClick调用setSection()设置应该在内部呈现的部分。我将状态'section'作为prop传递,由内部函数检查。
function Content(props) {

    const activeSection = props.currentSection;
    
    const sectionSelector = () => {
        if (activeSection === 'Home')
            return <Home />
        if (activeSection === 'Specials')
            return <Specials />
    }

为什么不呈现sectionSelector()中的内容?是因为在呈现的时候它还没有被返回吗?我应该改变代码的结构吗?
谢谢大家。

6xfqseft

6xfqseft1#

看起来sectionSelector()函数缺少了一些activeSection匹配节的情况。例如,如果activeSection是'Menu'或'Contact',则函数将不返回任何内容。您还需要为这些情况添加相应的return语句。
另外,确保在Content组件的return语句中调用sectionSelector()函数,如下所示:

const Content = (props) => {
  const currentActiveSection = props.currentSection;
    
  const sectionSelector = () => {
    if (currentActiveSection === 'Home') {
      return <Home />;
    }
    if (currentActiveSection === 'Specials') {
      return <Specials />;
    }
    if (currentActiveSection === 'Menu') {
      return <Menu />;
    }
    if (currentActiveSection === 'Contact') {
      return <Contact />;
    }
  };

  return (
    <div className='contentContainer'>
      {sectionSelector()}
    </div>
  );
}

相关问题