【发布时间】:2017-01-06 10:05:13
【问题描述】:
我是反应原生 + redux 的新手。我有一个反应本机应用程序,其中用户第一个屏幕是登录,登录后显示来自服务器的类别列表页面。要获取类别列表需要传递身份验证令牌,我们从登录屏幕获取,或者如果他之前登录过,则从 AsyncStorage 获取。
所以在重新设计任何组件之前,我正在创建商店并像这样手动调度 fetchProfile() 操作。
const store = createStore(reducer);
store.dispatch(fetchProfile());
因此 fetchProfile() 尝试从 AsyncStorage 读取配置文件数据并使用数据调度操作。
export function fetchProfile() {
return dispatch => {
AsyncStorage.getItem('@myapp:profile')
.then((profileString) => {
dispatch({
type: 'FETCH_PROFILE',
profile: profileString ? JSON.parse(profileString) : {}
})
})
}
}
所以在存储填充之前,登录页面会被渲染。因此,使用 react-redux 的 connect 方法,我订阅了存储更改并有条件地加载登录页面。
class MyApp extends React.Component {
render() {
if(this.props.profile)
if(this.props.profile.authentication_token)
retunr (<Home />);
else
return (<Login />);
else
return (<Loading />);
}
}
import { connect } from 'react-redux';
const mapStateToProps = (state) => {
return {
profile: state.profile
}
}
module.exports = connect(mapStateToProps, null)(MyApp);
所以首先渲染“加载”组件,然后在填充存储时渲染“登录”或“主页”组件。那么它是一个正确的流程吗?或者有没有一种方法可以在任何组件渲染之前先填充存储,而不是渲染“加载”组件,我可以直接渲染“登录”或“主页”组件。
【问题讨论】:
标签: reactjs react-native redux react-redux