Redux:在 Reducers 中修改状态,是否可以接受?
Redux: Modifying state in Reducers, is it acceptable?
在这个示例项目中,我有一个登录表单,并且我有一些等待在已验证登录或登录失败[的情况下调度的操作.
这两个操作可能由处理与后端对话的提交事件的操作触发。根据后端的响应,它会触发 verified login 或 failed login.
为了在视图层中对这些情况做出正确的反应,我在状态中使用了一些布尔值。下面的减速器根据触发器修改这些值的状态。
减速机
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;
}
}
在减速器中像这样改变状态被认为是不好的做法吗?我知道我可以 return 我在操作本身中编辑的值,然后像我处理用户数据一样在 reducer 中分配 returned 值,你认为这是更好的做法吗在当前表格上?
你根本没有改变状态。你这样做的方式完全可以接受。通过写这个
return {
...state,
loginRejected: true
};
您实际上是在使用状态创建一个新对象并在不改变状态的情况下返回新对象。其实你的做法是一种最佳实践。
在这个示例项目中,我有一个登录表单,并且我有一些等待在已验证登录或登录失败[的情况下调度的操作.
这两个操作可能由处理与后端对话的提交事件的操作触发。根据后端的响应,它会触发 verified login 或 failed login.
为了在视图层中对这些情况做出正确的反应,我在状态中使用了一些布尔值。下面的减速器根据触发器修改这些值的状态。
减速机
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;
}
}
在减速器中像这样改变状态被认为是不好的做法吗?我知道我可以 return 我在操作本身中编辑的值,然后像我处理用户数据一样在 reducer 中分配 returned 值,你认为这是更好的做法吗在当前表格上?
你根本没有改变状态。你这样做的方式完全可以接受。通过写这个
return {
...state,
loginRejected: true
};
您实际上是在使用状态创建一个新对象并在不改变状态的情况下返回新对象。其实你的做法是一种最佳实践。