在我的例子中:
const initialState = {
users: [
{
id: "1",
name: "user1",
email: "uesr1@gmail.com",
isEnter: false,
},
{
id: "2",
name: "user2",
email: "user2@gmail.com",
isEnter: false,
},
{
id: "3",
name: "user3",
email: "user@gmail.com",
isEnter: false,
},
],
};
const testSlice = createSlice({
name: "test",
initialState,
reducers: {
enterUser(state, action) {
// const findUser = state.users.find((user) => user.id === action.payload);
// findUser.isEnter = true;
},
exitUser(state, action) {
// const findUser = state.users.find((user) => user.id === action.payload);
// findUser.isEnter = false;
}
});
我想通过state.users
中的id找到特定用户的对象,并更改isEnter
属性。
然而,在减速器内部,state.users
作为代理(而不是数组)出现,因此我不能使用Array.prototype.find()
。
所以我尝试使用current(state.users).find()
,但它是一个只读数组,所以我不能改变isEnter
属性。
我该怎么办?帮助. .
提供用户id作为有效负载。
enterUser(state, action) {
const user = state.users.find(user => user.id === action.payload);
state user = state.users.filter(item => item.id !== action.payload).concat([{...user, isEnter: !user.isEnter}]);
},