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

向子组件传递state时变量未定义问题求助

问题分析与解决

核心问题:favourites未传递到UserProfile组件

你在Route标签上直接写了favourites={favourites},但React Router的<Route>组件不会把自身的props传递给element属性里的组件。必须把favourites作为props直接传给<UserProfile>组件:

// 错误写法
<Route path='/profile' element={<UserProfile images={images} getItem={getItem}/>} favourites={favourites} />

// 正确写法
<Route path='/profile' element={<UserProfile images={images} getItem={getItem} favourites={favourites} />} />

其他需要修复的问题

1. getItem函数的状态更新逻辑错误

当前写法setFavourites([favourites, item])会把旧的favourites数组作为新数组的第一个元素,导致数组嵌套(比如变成[[初始对象], 新对象]),还可能因闭包问题导致状态更新不及时。改用函数式更新展开数组:

function getItem (item) {
  // 避免传入无效值
  if (!item) return;
  setFavourites(prevFavourites => [...prevFavourites, item])
}

2. 无效的useEffect调用

你在useEffect里调用getItem()但未传参数,会把undefined加入favourites数组,直接删除这段代码即可:

// 删掉这段无意义的代码
useEffect(() => {
  getItem()
}, [])

3. ImageGrid组件的样式问题

className="flex flex- justify-center "里的flex-是无效样式,改成flex即可:

<div className="flex justify-center ">

修正后的App.js核心代码

const [favourites, setFavourites] = useState([
  {
    type: 'peppermint Latte',
    cafe: 'Nomad',
    location: 'Barcelona',
    price: '$2',
    img: Coffee4,
    index: 4,
  }
]);

// Get items for favourites
function getItem (item) {
  if (!item) return;
  setFavourites(prev => [...prev, item])
}

return (
  <>
    <Router>
      <Routes>
        <Route path='/' element={<LoginPage/>} />
        <Route path='/profile' element={<UserProfile images={images} getItem={getItem} favourites={favourites} />} />
      </Routes>
    </Router>
  </>
);

修改后,UserProfile组件就能正常接收favourites变量,收藏功能的逻辑也会更稳定。

内容的提问来源于stack exchange,提问作者Gavin-walsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:56