Redux 状态未在开发中的整个应用程序中更新
Redux state isn't being updated across the app in development
我在使用 redux 时遇到了一个非常奇怪的问题。在我当前的应用程序中,我决定使用注销模式 .
基本上是这样的:
const withLogout = (state, action) => {
if (action.type === UserActions.logout.toString()) {
state = undefined
}
return rootReducer(state, action)
}
在调度注销操作后清除状态。我向 reducer 添加了日志,它们都显示状态正在重置为默认值。 React Native Debugger 显示相同的内容。
但是,connect
(react-redux
) 函数中的状态不会改变。更奇怪的是,看起来该函数检测到状态已更改的事实,因为 mapState
中的记录器函数正在被触发。但是记录器的输出显示那里的状态没有改变。组件也没有得到更新。
正如我在标题中提到的,此问题仅在开发模式下发生。一旦我构建应用程序并安装它,一切都会按预期开始工作。而且它不是由调试器引起的。
有什么想法吗?
找到原因了。我不得不在几个无法使用 react-redux
发送操作的地方导入商店。这导致需要循环,有时会导致创建商店的多个实例。
我偶然发现了以下解决方案,可确保您在整个应用程序中使用相同的商店实例:使用以下模式而不是在多个地方导入商店:
// somewhere in the code
let store
export const setStore = storeInstance => store = storeInstance
...
store.dispatch()
// store index.js
import { setStore } from 'someplace'
...
setStore(store)
我在使用 redux 时遇到了一个非常奇怪的问题。在我当前的应用程序中,我决定使用注销模式
基本上是这样的:
const withLogout = (state, action) => {
if (action.type === UserActions.logout.toString()) {
state = undefined
}
return rootReducer(state, action)
}
在调度注销操作后清除状态。我向 reducer 添加了日志,它们都显示状态正在重置为默认值。 React Native Debugger 显示相同的内容。
但是,connect
(react-redux
) 函数中的状态不会改变。更奇怪的是,看起来该函数检测到状态已更改的事实,因为 mapState
中的记录器函数正在被触发。但是记录器的输出显示那里的状态没有改变。组件也没有得到更新。
正如我在标题中提到的,此问题仅在开发模式下发生。一旦我构建应用程序并安装它,一切都会按预期开始工作。而且它不是由调试器引起的。
有什么想法吗?
找到原因了。我不得不在几个无法使用 react-redux
发送操作的地方导入商店。这导致需要循环,有时会导致创建商店的多个实例。
我偶然发现了以下解决方案,可确保您在整个应用程序中使用相同的商店实例:使用以下模式而不是在多个地方导入商店:
// somewhere in the code
let store
export const setStore = storeInstance => store = storeInstance
...
store.dispatch()
// store index.js
import { setStore } from 'someplace'
...
setStore(store)