reactjs - React Hooks:从不同的 .jsx 文件更新 useState 挂钩?
问题描述
我有两个组件,每个组件都在自己的文件中,我真的很想将它们分开,因为第二个组件是可重复使用的。但是,我需要能够从“父”组件更新“子”组件中的钩子之一。我尝试过将一个值作为道具传递,但这实际上不会将该值设置回 0。我什至不确定它会做什么。
更具体地说,我在子组件中使用 Material UI Tabs 组件,并希望通过使用父组件中的道具来更新 Tabpanel 的“值”。
这是一个具有相同问题的示例代码沙箱。
要查看问题:
键入并选择“蔬菜”,然后单击第二个选项卡“朝鲜蓟”。如果再次单击搜索栏,然后选择“水果”,选项卡值仍为“1”,因此组件将不显示任何内容,直到您手动单击“草莓”选项卡。
您还会收到此错误:
MUI:
value
提供给 Tabs 组件的内容无效。选项卡的子项都没有与“1”匹配。您可以提供以下值之一:0。
解决方案
我看到您的问题有两种解决方案。
- 我会
key
为您的组件添加标签,如下所示:
<Food key={selectedFood} desiredFood={selectedFood} val={0} />
它将在更改Food
时使用新的道具重新渲染您的组件。selectedFood
更残酷 - 只需使用反应钩子 - useEffect - 我不推荐它,但你可以在你的 Food 方法中添加这个钩子并将依赖数组设置为
selectedFood
useEffect(() => { console.log("render"); setValue(0); }, [props.desiredFood]);
这只是我脑海中浮现的一些东西,如果我想出更好的主意,我会分享它。
Food
两种解决方案都会在每次selectedFood
val 更改时重新渲染组件。
这是我希望的工作解决方案的叉子。
推荐阅读
- imageview - 为什么 VkImageView 格式与底层 VkImage 格式不同?
- javascript - 如何在 Javascript 中生成加密安全的伪随机数?
- python - Python 中的 Lambda 表达式
- python - handle_data() 返回什么?
- python - 使用基于列表名称的逻辑将列表转换为 DataFrame
- php - Apple 验证收据数据 21002 错误 - PHP 后端和 React Native
- django - 来自 Django 模型方法的搜索结果,包括先前调用同一方法的结果
- ruby - Ruby - 石头、纸和剪刀游戏的玩家对玩家
- mysql - 有没有办法通过快递将我的 MySQL 数据库 Dockerize 并将该容器托管在数字海洋 .. 等上?
- typescript - TypeScript:当启用严格的函数类型时,键入一个接受新对象的函数