Reactjs Redux-在reducer中更新状态,但不更新组件的新值
当在redux中结合React app更新状态时,在reducer中更新状态。但在容器中,我仍然得到旧的状态 下面是减速器Reactjs Redux-在reducer中更新状态,但不更新组件的新值,reactjs,redux,Reactjs,Redux,当在redux中结合React app更新状态时,在reducer中更新状态。但在容器中,我仍然得到旧的状态 下面是减速器 import * as constants from '../actions/constants'; export function caseTypes(state=[], action) { switch(action.type) { case constants.LOAD_CASE_TYPES_SUCCESS: return action.ca
import * as constants from '../actions/constants';
export function caseTypes(state=[], action) {
switch(action.type) {
case constants.LOAD_CASE_TYPES_SUCCESS:
return action.caseTypes
default:
return state;
}
}
export function cases(state=[], action) {
switch (action.type) {
case constants.LOAD_CASES_SUCCESS:
const newState = Object.assign({}, state, {cases:action.cases})
alert('newstate' + newState.cases)
return newState;
default:
return state;
}
}
如果我在reducer“cases”中保持一个警报,我将获得更新到状态的新值。但在下面的组件中,我的内部仍然处于旧状态
MapStateTops函数。操作从CaseSearchConnectComponent发出,CaseSearchConnectComponent内的MapStateTops也会给出旧值
class casePage extends React.Component {
render() {
return(
<div>
<div height="100px">
<CaseSearchConnectComponent/>
</div>
{this.props.loadCaseList &&
<div>
<CaseListConnectComponent cases={this.props.cases}/>
</div>
}
</div>
)
}
}
function mapStateToProps(state) {
alert("case page cases " + state.cases)
return {
cases:state.cases
};
}
const CasePageConnectComponent = connect(mapStateToProps)(casePage);
export default CasePageConnectComponent;
class casePage扩展了React.Component{
render(){
返回(
{this.props.loadCaseList&&
}
)
}
}
函数MapStateTops(状态){
警报(“案例页面案例”+状态案例)
返回{
案例:国家案例
};
}
const CasePageConnectComponent=connect(mapStateToProps)(casePage);
导出默认CasePageConnectComponent;
您在mapStateToProps
之后错过了mapDispatchToProps
。
MapStateTrops
和mapDispatchToProps
都是纯函数,分别由存储“状态”和“调度”提供。此外,这两个函数都必须返回一个对象,然后该对象的键将作为它们所连接的组件的道具传递
请考虑一下,以供参考。您好。您能告诉我如何将“loadCaseList”传递到casePage组件中吗?另外,mapStateToProps中的警报是否被调用?我会删除警报,并将console.log放在两个位置:在casePage的render函数的开头,返回之前,以及在reducer中,在case constants.LOAD\u CASES\u SUCCESS之后。告诉我们你发现了什么。@AbhayShiro:对不起,我错过了mapStateToProps和reducer中的装载案例列表。将调用MapStateTops中的警报,但它不会返回在reducer中设置的值。但是reducer中的警报给出了更新的值。
案例的初始状态为状态=[]
,然后在收到操作类型LOAD\u cases\u SUCCESS后,将其更改为JSON对象{cases:[..]}
。有什么特别的原因吗?这会引起很多困惑。@ThoVu:不,我刚刚做了,没有具体的原因。基本上,caseTypes reducer函数最初被调用,我得到容器中caseTypes的值。但是,调用“cases”reducer函数后,reducer中的警报将显示cases值。但在我的组件中,我无法获得cases值。但是,caseTypes是可用的,它已经在页面加载时添加。对不起,我认为这不能解决问题。mapDispatchToProps在这里是不相关的,您只需要使用它来调度组件的操作。哦,您没有提供操作
<当您通过API
获取数据,然后将这些数据传递到reducer
中设置状态的时,需要code>操作。在reducer中,使用mapStateToProps
将状态映射到道具。我想你的减速器已经用代理值更新了<代码>重复执行
如果不执行操作将无法工作<代码>操作
和减速机
是状态管理的两个组成部分。@Thananjaya,谢谢。动作已经传递,在reducer中,我可以看到动作中的值更新为状态。reducer“alert('newstate'+newstate.cases)”处的警报显示新值。已从CaseSearchConnectComponent触发操作,该组件在CasePage Component.Good中给出。如果你愿意,请把我的答案记为正确答案。快乐的黑客!