疑难解答
#redux 频道 是 Reactiflux Discord 社区 中所有与学习和使用 Redux 相关问题的官方资源。Reactiflux 是一个很棒的地方,可以在这里闲逛、提问和学习 - 加入我们吧!
您也可以在 Stack Overflow 上使用 #redux 标签 提问。
我的视图没有更新!
简而言之,
- Reducer 永远不应该改变状态,它们必须返回新的对象,否则 React Redux 将无法看到更新。
- 确保您确实在派发动作。例如,如果您有一个像
addTodo
这样的动作创建器,仅仅调用导入的addTodo()
函数本身不会有任何作用,因为它只是返回一个动作,但不会派发它。您需要调用dispatch(addTodo())
(如果使用钩子 API)或props.addTodo()
(如果使用connect
+mapDispatch
)。
在上下文或 props 中都找不到“store”
如果您遇到上下文问题,
- 确保页面上没有重复的 React 实例。
- 确保项目中没有多个 React Redux 实例/副本。
- 确保您没有忘记将根组件或其他祖先组件包裹在
<Provider>
中。 - 确保您正在运行最新版本的 React 和 React Redux。
Invariant Violation: addComponentAsRefTo(...): 只有 ReactOwner 可以拥有 refs。这通常意味着您试图将 ref 添加到没有所有者的组件
如果您在 Web 上使用 React,这通常意味着您有一个 重复的 React。按照链接中的说明解决此问题。
我在单元测试中收到有关 useLayoutEffect 的警告
如果在“服务器”上使用 useLayoutEffect
,ReactDOM 会发出此警告。React Redux 试图通过检测它是否在浏览器上下文中运行来解决此问题。默认情况下,Jest 定义了足够的浏览器环境,使 React Redux 认为它在浏览器中运行,从而导致这些警告。
您可以通过为单个测试文件设置 @jest-environment
来防止警告
// my.test.jsx
/**
* @jest-environment node
*/
或者通过全局设置它
// package.json
{
"name": "my-project",
"jest": {
"testEnvironment": "node"
}
}
参见 https://github.com/facebook/react/issues/14927#issuecomment-490426131