Reactjs Redux-在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

当在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.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中给出。如果你愿意,请把我的答案记为正确答案。快乐的黑客!