作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
应用程序以 redux-persist 启动后,我无法访问保存的数据.
reducer 使用在我的初始状态中定义的数据进行初始化。当使用 AsyncStorage 加载上一个 session 的状态时,该组件已经显示为默认数据。
我知道数据已保存并成功获取。如果我将屏幕留在另一个屏幕上然后再回到它,我可以看到数据显示正确。调试状态和 Prop 也表明这是一个异步时序问题。
如何将 redux 容器的加载延迟到商店重新水化之后。或者,我可以强制更新容器(及其子容器)以在商店完成加载时进行更新吗?
这是我尝试过的。
配置我的商店:
export default function configureStore(initialState) {
const middlewares = [thunk];
if (process.env.NODE_ENV === `development`) {
const createLogger = require(`redux-logger`);
const logger = createLogger();
middlewares.push(logger);
}
let store = compose(
applyMiddleware(...middlewares),
autoRehydrate() )(createStore)(reducers);
persistStore(store, {blacklist: ['routing'], storage: AsyncStorage}, () => {
store.dispatch(storeRehydrateComplete())
})
return store
}
import { REHYDRATE_STORE } from './types'
export function storeRehydrateComplete(){
return {
type: REHYDRATE_STORE,
}
}
export default function reducer(state = initialState, action){
switch (action.type) {
case REHYDRATE_STORE:
return {...state, storeIsReady:true}
break;
default:
return state
break;
}
}
最佳答案
我按照这个食谱解决了这个问题:
delay-render-until-rehydration-complete
基本上解决方法如下:
在包裹 <Provider>
的组件中,创建一个本地状态标志来跟踪商店是否已经补水。使用persistStore() 的回调来更新这个标志。
在此包装器的渲染函数中,如果标志为真,则渲染 <Provider>
, 否则,渲染一些临时 View 。
关于react-native - 在使用 redux-persist 存储重新水化之前加载初始状态的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747080/
如果我运行类似于以下的查询: SELECT * FROM user u LEFT JOIN orders o ON o.user_id=u.id LEFT JOIN payments p ON p.o
我是一名优秀的程序员,十分优秀!