代码沙盒:https://codesandbox.io/s/condescending-wiles-funk0?file=/src/App.js
问题:当我更新商店的状态时,不会重新渲染组件。在上面的例子中,你可以从控制台看到数据被正确获取,但组件没有重新渲染,只是继续渲染 python -m pip install beautifulsoup4
。
预期行为:当我更新状态时,组件会重新渲染。
我通过在组件中使用 useState 并订阅来存储如下更改找到了一种解决方法:
Loading...
这基本上会在每次更新数据时强制重新渲染。
我可以改变状态:在官方文档中他们说你可以改变状态,因为它有一些允许这样做的魔法(https://redux-toolkit.js.org/usage/usage-guide#simplifying-reducers-with-createreducer),因此这不是问题.
有人知道什么是使其工作的适当方法吗?
答案 0 :(得分:2)
从 useStore docs 中,它指出不应在应用程序中使用钩子,因为它不会导致组件重新渲染:
<块引用>// 仅示例!请勿在真实应用中执行此操作。
<块引用>// store state 改变时组件不会自动更新
相反,您应该使用 useSelector。
在那一点上,您的代码和框示例的方式会导致无限重新渲染,因为每次更新 redux 状态时都会调用 dispatch(fetchData());
。相反,您需要将它放在 React.useEffect
内。
例如,将 useSelector
与 useEffect
结合使用:
答案 1 :(得分:1)
在 Github 上得到了答案:https://github.com/reduxjs/redux-toolkit/issues/942#issuecomment-807813092
<块引用>您不应该使用 useStore 钩子。你应该使用 useSelector 钩子,订阅存储更新: