reactjs - 使用useeffect和dispatch时react redux导致无限循环
问题描述
我删除了我最初的问题,因为我没有很好地解释它,导致不必要的讨论和失去焦点。
我正在尝试使用 react 和 redux 构建一个应用程序,并且在使用 useEffect 和 dispatch 时陷入了无限循环。
我构建了一个代码框来重现该问题。这是我的工作。 https://codesandbox.io/s/suspicious-morning-ew161 这个问题似乎与 App.js 中的第 8 行有关,但我无法解释原因和方式。
解决方案
你不应该这样写useSelector
电话。见https://react-redux.js.org/api/hooks#equality-comparisons-and-updates
代替
const { auth } = useSelector((state) => ({ ...state }));
写
const auth = useSelector((state) => state.auth);
你的另一个问题是
component={(props) => (
<TestProfilePage {...props} key={props.match.params.user_id} />
)}
这将在每次重新渲染时创建一个新组件,React 将卸载整个组件树并创建一个新组件,有效地重新运行您的useEffect
. 而不是component
,使用render
. 另请参阅有关的 react-router 文档。
您的代码做了两件事:
- 它在每次选择器调用时返回一个新对象,这将使您的组件始终重新渲染,即使没有状态更改
- 它会返回完整状态,因此即使您只是在
state
没有展开的情况下返回,它也会在任何状态更改时重新呈现。
推荐阅读
- google-sheets - 如何根据名称找到最新的行?
- c++ - 在变量 c++ 上使用 TEXT 函数
- python - Airflow - AWSAthenaOperator 用于动态查询列表
- android - 获取 Android 和 IOS 的下载次数以及不同的唯一用户
- c# - 通过 HttpClient 禁用单个 url 的请求日志记录
- docker - iptables 块码头工人
- javascript - 使用正则表达式从字符串中取出 html
- reactjs - 如何在 React 中创建下载链接 (PDF)
- shopify - 获取当前选择的变体的数量 - cart.liquid
- python - pandas 中的动态滚动功能