问个redux的不更新的问题

#1
export default function counter(state =initialState, action ) {
        switch (action.type) {
            case types.CREATE_NEW_ELEMENT:
            return {
                ...state,
                count: state.count+1,
                show: true,
            }
            case types.REMOVE_AN_ELEMENT:
                action.user.splice(0,1)                
                return {
                    ...state,
                    user: action.user
                }
            case types.CLOSE_THE_MODAL:
                return {
                    ...state,
                    show: false
                }
            case types.THE_USER_INFO:
                return {
                    ...state,
                    show: false,
                    user: action.user
                }
            default:
                return state
        }
}

我在传进来的user数组中删除一个元素,,然后redux并不会更新,,关键splice方法返回的是被删除的元素,, case types.REMOVE_AN_ELEMENT:

                action.user.splice(0,1)                
                return {
                    ...state,
                    user: action.user.splice(0,1)
                }

我如果这样写,页面会更新,,但是是渲染出我删除的那个元素,,,改怎么写啊???

#3
export default function counter(state =initialState, action ) {
        switch (action.type) {
            case types.CREATE_NEW_ELEMENT:
            return {
                ...state,
                count: state.count+1,
                show: true,
            }
            case types.REMOVE_AN_ELEMENT:
                action.user.splice(0,1)
                return {
                    ...state,
                    user: action.user
                }
            case types.CLOSE_THE_MODAL:
                return {
                    ...state,
                    show: false
                }
            case types.THE_USER_INFO:
                return {
                    ...state,
                    show: false,
                    user: action.user
                }
            default:
                return state
        }
}
#4

使用redux的时候要确保前后state的改变,特别要注意引用类型。

var user = [1, 2, 3];
var oldUser = user;
user.splice(0, 2);
oldUser === user; // true
oldUser === [...user]; // flase
case types.REMOVE_AN_ELEMENT:
action.user.splice(0,1) 
return {
...state,
user: [...action.user]
}
2 Likes
#5

:smile: 你是正确的,我今天在改这个问题时把前面写的user的值给删了,导致值没传过来,,所以报了undefined