4
私はアンドロイドアプリケーションを開発しています。これにより、画面はユーザがログインしているかどうかに依存します。ログインデータは、AsyncStorage内に保存されます。Native Reduxに反応します - デフォルト状態を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);
初期状態をcreateStore関数に与えることができます:http://redux.js.org/docs/api/createStore.html。非同期ストレージからデータを読み取り、それを適切な状態を設定するcreateStore()関数に渡すことができます。 –
@AnkitAggarwal asyncstorageからデータを取得し、createstoreに渡すべき場所の例を教えてください。 asyncstorageが非同期であるため、初期化するための良い方法は何かわかりません –
redux-persis(https://github.com/rt2zz/redux-persist)について読んでこの概念(https:// github.com/rt2zz/redux-persist/blob/master/docs/recipes.md#delay-render-until-rehydration-complete)。 redux-persistをそのまま使用する必要はありませんが、ここから復水のアイデアを使用することができます。遅延レンダリングの2番目のリンクを確認してください。 –