Redux:在Reducers中修改状态,是否可以接受?

时间:2017-02-26 09:53:27

标签: javascript reactjs functional-programming redux immutability

在这个示例项目中,我有一个登录表单,在验证登录登录失败的情况下,我有一些等待调度的操作。

这两个操作可能由处理与后端通信的提交事件的操作触发。根据后端的响应,它会激活验证登录登录失败

为了对视图层中的这些情况做出适当的反应,我在州内有一些布尔值。下面的reducer根据触发器修改这些值的状态。

减速机

import {FAILED_LOGIN, VERIFIED_LOGIN} from './../actions/LoginActions';

const INITIAL_STATE = {
    loginRejected: false,
    loginApproved: false,
    username: null,
    id: null,
    token: null
};

export default function(state = INITIAL_STATE, action) {
    switch (action.type) {
    case FAILED_LOGIN:
        return {
            ...state,
            loginRejected: true
        };
    case VERIFIED_LOGIN:
        return {
            ...state,
            loginRejected: false,
            loginApproved: true,
            username: action.payload.data.email,
            id: action.payload.data._id,
            token: action.payload.headers['x-auth']
        };
    default:
        return state;
    }
}

在减速机中改变这样的状态是否被认为是不好的做法?我知道我可以在动作本身中返回我正在编辑的值,只需在reducer中分配返回的值,就像我在处理用户数据一样,您是否认为这比当前表单更好?

1 个答案:

答案 0 :(得分:2)

你根本不会改变国家。你这样做的方式完全正常和可接受。通过写这个

return {
            ...state,
            loginRejected: true
        };

实际上是在创建一个具有状态的新对象并返回新对象而不改变状态。事实上,你所做的是一种最佳实践。