【问题标题】:react-redux store not updatingreact-redux 商店不更新
【发布时间】:2020-02-06 14:40:38
【问题描述】:

mapStatetoProps 中的值显示为未定义

Index.js 文件:

static initialAction() {
    return fetchUsers();
}

render() {

    const user = this.props.user;
    console.log(user);

    return (
        <div className="usersWrapper"></div>
    )
}

const mapStateToProps = state => ({
    user: state. usersR.users.users
});

来自 UserReducer.js 文件的部分代码:

const defaultUserState = {
   users:[],
 }

const userReducer = (state = defaultUserState , action) => {
    switch(action.type){
         case actionType.USER_DATA:
            console.log("update_user_begins",action,action.payload);

            let newState={
                    users: [...state.users, ...action.payload]
                }
            state = {...state,users: newState }          

        break;
    } 

}

console.log(state);

输出如下,

action.payload 的值为:

[
    { Name: 'ABC', Age: 10, Address: 'COLOMBO 02' },
    { Name: 'DEF', Age: 11, Address: 'COLOMBO 03' },
    { Name: 'wxy', Age: 45, Address: 'Nugegoda' }
]

UserReducer 的返回状态是:

{ users: { users: [ [Object], [Object], [Object] ] } }

【问题讨论】:

  • ** console.log(state); ** ?编写代码示例时,必须是有效代码。
  • user: state. usersR.users.users - 这根本不像你的状态形状。

标签: node.js reactjs react-redux


【解决方案1】:

确保不要忘记将您的组件连接到 redux 商店

export default connect(mapStateToProps)(myComponent)

或检查 mapStateToProps 上的路径并确保其路径良好,或注销整个状态以检查良好路径:

 render() {
          const state= this.props.state;
           console.log(state);

        return (
           <div className="usersWrapper">
           </div>
 )
    }


    const mapStateToProps = state => ({
        **state: state**

 });

【讨论】:

  • 我已经通过connect方法将它连接到存储。所以问题不在于那个。
  • 然后,尝试注销整个状态并检查用户是否存在
【解决方案2】:

我猜,你忘了在减速器中添加return

const defaultUserState = {
   users:[],
 }

const userReducer = (state = defaultUserState , action) => {
    switch(action.type){
         case actionType.USER_DATA:
            console.log("update_user_begins",action,action.payload);

            let newState={
                    users: [...state.users, ...action.payload]
                }
            return {...state, users: newState } // <= here is return, not assignment.         

        break;
    } 

}

【讨论】:

    【解决方案3】:

    我认为你需要从 reducer 返回 newState 并且不要改变之前的状态 你可以这样做

    const userReducer = (state = defaultUserState , action) => {
    switch(action.type){
         case actionType.USER_DATA:
            console.log("update_user_begins",action,action.payload);
    
            let newState={
                    users: [...state.users, ...action.payload]
                }
            return {...state, users: action.payload }          
    
    } 
    
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      情况是我如何访问 UserR 的值。它应该是 users.users[0]。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        • 2019-09-16
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        相关资源
        最近更新 更多