React Native Redux - 从asyncstorage初始化默认状态

时间:2017-06-17 17:48:11

标签: react-native

我正在开发一个Android应用程序,我的屏幕必须依赖于用户是否登录。登录数据存储在AsyncStorage中。

当应用程序启动时,它应该从AsyncStorage获取数据并将其作为默认状态。我怎样才能实现这一目标?

以下是我的redux结构

index.android.js

import {
  AppRegistry,
} from 'react-native';

import Root from './src/scripts/Root.js';

AppRegistry.registerComponent('reduxReactNavigation', () => Root);

Root.js

import React, { Component } from "react";
import { Text, AsyncStorage } from "react-native";
import { Provider, connect } from "react-redux";
import { addNavigationHelpers } from 'react-navigation';

import getStore from "./store";
import { AppNavigator } from './routers';

const navReducer = (state, action) => {
    const newState = AppNavigator.router.getStateForAction(action, state);
    return newState || state;
};

const mapStateToProps = (state) => ({
    nav: state.nav
});

const user = {};

class App extends Component {
  constructor(){
    super();
  }

  render() {
    return (
        <AppNavigator
            navigation={addNavigationHelpers({
                dispatch: this.props.dispatch,
                state: this.props.nav
            })}
        />
    );
  }
}

const AppWithNavigationState = connect(mapStateToProps)(App);

const store = getStore(navReducer);

export default function Root() {
    return (
        <Provider store={store}>
            <AppWithNavigationState />
        </Provider>
    );
}

用户减少者

import {
    REGISTER_USER,
    UPDATE_USER,
    LOGIN_USER
} from '../../actions/actionTypes';

import { handleActions } from 'redux-actions';

**// here is the default state, i would like to get from asyncstorage**
const defaultState = {
  isLoggedIn: false,
  user:{},
};

export const user = handleActions({
  REGISTER_USER: {
    next(state, action){
      return { ...state, user: action.payload, isLoggedIn: true }
    }
  },
  LOGIN_USER: {
    next(state, action){
      return { ...state, user: action.payload, isLoggedIn: true }
    }
  },
}, defaultState);

1 个答案:

答案 0 :(得分:1)

您可以使用组件生命周期方法componentWillMount从AsyncStorage获取数据,当数据到达时,您可以更改状态。