【发布时间】:2019-01-30 03:45:07
【问题描述】:
我正在构建一个反应原生应用程序并使用 redux 来处理状态。我遇到了这样一种情况,当 redux 状态发生变化时,我的一个容器没有立即更新。
容器:
...
class ContainerClass extends Component<Props, State> {
...
componentWillReceiveProps(nextProps: Object) {
console.log('WILL RECEIVE PROPS:', nextProps);
}
...
render() {
const { data } = this.props;
return <SubComponent data={data} />
}
}
const mapStateToProps = (state) => ({
data: state.data
};
export default connect(mapStateToProps)(ContainerClass);
减速机:
...
export default function reducer(state = initalState, action) => {
switch(action.type) {
case getType(actions.actionOne):
console.log('SETTING THE STATE');
return { ...state, data: action.payload };
...
...
...
在另一个随机组件中,我正在调度一个带有 actionOne 操作的调用,我确认它会打印出相关的 console.log。但是容器中componentWillReceiveProps中的console.log没有打印出来。
派发调用的组件是一个已经出现在Container之上的模态,调用被派发并更新状态后会自动关闭。奇怪的是,虽然 Container 没有立即更新,但如果我导航到不同的页面,然后返回 Container 页面,状态实际上已经更新了。
编辑:初始状态是:
const initialState: Store = {
data: []
}
而我调度的方式是在一个不同的组件中,它被 Container 称为新模式(使用 react-native-navigation):
fnc() {
...
setData(data.concat(newDatum));
...
}
setData 和 data 分别是 redux dispatch action 和 store 的一部分,它们分别是从 Container (通过上面显示的 mapStateToProps 有 setData 和 data 以及 mapDispatchToProps 传入的)我没有显示)。
【问题讨论】:
-
也许你的实际代码不同,但你在 mapStateToProps 中有一个未闭合的括号
-
@Infamous911:请分享您如何调度操作的代码
-
请在
state = initalState中分享您的state结构 -
@RIYAJKHAN 添加了
-
@Isaac 添加在上面
标签: reactjs react-native redux react-redux react-native-navigation