我怎么能等到reducer商店分配完成?

时间:2017-09-26 14:28:09

标签: react-native react-redux redux-thunk

我正在使用react-native与react-redux和redux-thunk。基本上我Component与[{1}}相关联,用store修改了一些信息。尽管每个操作似乎都是同步的,但我会在修改后的下一行获取旧数据。

dispatch

如何获得新的//reducer import {assign as _assign} from 'lodash-es'; let initialState = {name: '1'}; export default (state = initialState, action) => { switch (action.type) { case 'Project renamed': return _assign({}, state, {name: action.data}); default: return state; } }; //Component import React, {Component} from 'react'; import {connect} from 'react-redux'; import Prompt from 'react-native-prompt'; class HomeScreen extends Component { render() { return <Prompt onSubmit={() => { this.props.onProjectRenamed('2'); console.log(this.props.currentProject.name) //Still get '1' here!!! }} />; } } const mapStateToProps = state => ({ currentProject: state.currentProject }); const mapDispatchToProps = dispatch => ({ onProjectRenamed: (data) => dispatch({ type: 'Project renamed', data: data }) }); export default connect(mapStateToProps, mapDispatchToProps)(HomeScreen); 值?

2 个答案:

答案 0 :(得分:2)

您可以通过行动和

返回承诺
const mapDispatchToProps = dispatch => ({
    onProjectRenamed: (data) => {
        dispatch({
            type: 'Project renamed',
            data: data
        })
        return Promise.resolve()
    }
});

现在,您可以在then

上使用onProjectRenamed
onSubmit={() => {
    this.props.onProjectRenamed('2').then(() => console.log(this.props.currentProject.name))
}}

答案 1 :(得分:1)

您在调用onSubmit时触发操作。此操作正在更新状态对象,这意味着您的组件将接收新的道具。 如果您实施了组件的ComponentWillReceivePropsComponentWillUpdate方法,然后尝试在其中打印console.log(nextprops.currentProject.name),则会得到响应2.只需尝试,

componentWillReceiveProps(nextProps) { 
  console.log(nexProps.currentProject.name)
}

请记住,在状态更新后调用组件的render方法时,this.props.currentProject.name将具有最新值,即2。

有关详细信息,请参阅React Component lifeCycle methods