我正在使用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);
值?
答案 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
时触发操作。此操作正在更新状态对象,这意味着您的组件将接收新的道具。
如果您实施了组件的ComponentWillReceiveProps
或ComponentWillUpdate
方法,然后尝试在其中打印console.log(nextprops.currentProject.name)
,则会得到响应2.只需尝试,
componentWillReceiveProps(nextProps) {
console.log(nexProps.currentProject.name)
}
请记住,在状态更新后调用组件的render
方法时,this.props.currentProject.name
将具有最新值,即2。
有关详细信息,请参阅React Component lifeCycle methods。