在这个示例项目中,我有一个登录表单,在验证登录或登录失败的情况下,我有一些等待调度的操作。
这两个操作可能由处理与后端通信的提交事件的操作触发。根据后端的响应,它会激活验证登录或登录失败。
为了对视图层中的这些情况做出适当的反应,我在州内有一些布尔值。下面的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中分配返回的值,就像我在处理用户数据一样,您是否认为这比当前表单更好?
答案 0 :(得分:2)
你根本不会改变国家。你这样做的方式完全正常和可接受。通过写这个
return {
...state,
loginRejected: true
};
实际上是在创建一个具有状态的新对象并返回新对象而不改变状态。事实上,你所做的是一种最佳实践。