You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS函数组件基于状态变更切换组件的实现问题

解决React组件状态切换的问题

嘿,我来帮你搞定这个状态切换的问题~

你遇到的核心问题是:setPage 是 App 组件内部的状态更新函数,A 组件作为子组件没办法直接访问到它。React遵循单向数据流的原则,子组件要修改父组件的状态,必须通过父组件传递过来的回调函数才行。

下面是具体的修改方案:

步骤1:把setPage作为props传递给A组件

在App组件的switch分支里,渲染A的时候把setPage传进去;另外你的初始状态page是'list',但switch里没处理这个情况,会导致组件渲染报错,所以要加上default分支:

function App() {
  const [page, setPage] = React.useState('list');
  switch(page) {
    case 'A':
      return(
        <div> {/* 注意:React组件里不要直接返回<body>,用div或Fragment包裹即可 */}
          <Home />
          <A setPage={setPage} />
        </div>
      )
    case 'B':
      return(
        <div>
          <Home />
          <B />
        </div>
      )
    default:
      // 初始状态默认渲染A页面
      return(
        <div>
          <Home />
          <A setPage={setPage} />
        </div>
      )
  }
}

步骤2:在A组件里接收并调用props中的setPage

修改A组件,通过props接收setPage,然后在点击事件里调用它:

function A({ setPage }) { // 解构props拿到setPage
  return (
    <div>
      <div onClick={() => setPage('B')}>GoToB</div>
    </div>
  )
}

完整修改后的代码

function App() {
  const [page, setPage] = React.useState('list');
  switch(page) {
    case 'A':
      return(
        <div>
          <Home />
          <A setPage={setPage} />
        </div>
      )
    case 'B':
      return(
        <div>
          <Home />
          <B />
        </div>
      )
    default:
      return(
        <div>
          <Home />
          <A setPage={setPage} />
        </div>
      )
  }
}

function A({ setPage }) {
  return (
    <div>
      <div onClick={() => setPage('B')}>GoToB</div>
    </div>
  )
}

function B() {
  return (
    <div>test</div>
  )
}

额外小提示

  • 不要在组件返回值里直接用<body>标签,React应用通常会挂载到页面已存在的<body>内的容器元素中,组件内部用div或<>(Fragment简写)包裹就好。
  • 一定要处理switch的default分支,避免因为状态值不在case范围内导致组件返回undefined,引发渲染错误。

内容的提问来源于stack exchange,提问作者NP2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:22:44