使用redux-persist保存和检索状态 - React Native

时间:2017-01-10 10:42:18

标签: reactjs react-native redux

我是刚接触本地的新手,我第一次尝试保存我应用的状态。

为了达到这个目的,我建议使用redux-persist。 我希望在网络上找到更多关于它的例子和主题,我觉得我对redux-persist如何工作的想法并不是那么清晰。

我已经关注了github页面中的简短指南,但是一旦我关闭并重新打开我的应用程序,我就看不到已保存的状态值,但我看到了默认的初始状态值。

这是我的app.js文件:

import React, { Component } from 'react';
import { AsyncStorage } from 'react-native'
import { Provider } from 'react-redux';
import { createStore, applyMiddleware, compose } from 'redux';
import { persistStore, autoRehydrate } from 'redux-persist';
import ReduxThunk from 'redux-thunk';
import reducers from './reducers';
import Router from './Router';

class App extends Component {
  render() {
    const store = compose(applyMiddleware(ReduxThunk), autoRehydrate())(createStore)(reducers); 
    persistStore(store, {storage: AsyncStorage}, () => {
        console.log('restored');
    })
    return (
      <Provider store={store}>
        <Router />
      </Provider>
    );
  }
}

export default App;

我还需要其他东西吗?

我也想知道如何console.log redux-persistor存储区内的所有状态值。

提前致谢

3 个答案:

答案 0 :(得分:4)

您已将persistStore放入render方法。 持久性调用是一种副作用,绝不应该在render内发生。

将其移至componentWillMount,正如redux-persist文档对您说的那样

export default class AppProvider extends Component {

  constructor() {
    super()
    this.state = { rehydrated: false }
  }

  componentWillMount(){
    persistStore(store, {}, () => {
      this.setState({ rehydrated: true })
    })
  }

  render() {
    if(!this.state.rehydrated){
      return <div>Loading...</div>
    }
    return (
      <Provider store={store}>
         {() => <App />}
      </Provider>
    );
  }
}

您需要在呈现存储之前推迟初始化。这就是此代码段的作用

答案 1 :(得分:0)

您可以使用

store.getState().whatEver;

答案 2 :(得分:0)

@ just-boris的回答可能会或可能不会为您解决此问题,但无论您是否应该将调用persistStore移出render函数,原因完全是他们提到的原因

如果没有任何错误,很难分辨出错是什么,但我怀疑在你的某个减速机中处理persist/REHYDRATE动作会帮助你找到问题

case 'persist/REHYDRATE': {
  console.log(action.payload) // persist's action uses "payload" not "data"

  return state // NOP, just wanted to log the payload
}

您还可以使用浏览器的检查工具检查本地存储空间,这样可以了解redux-persist内存储的内容。

enter image description here