Javascript 更改state React.js中的属性
我正在React中使用Todo应用程序,我需要一些帮助。这可能是一个微不足道的问题,但我不知道怎么做 context.js:Javascript 更改state React.js中的属性,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我正在React中使用Todo应用程序,我需要一些帮助。这可能是一个微不足道的问题,但我不知道怎么做 context.js: const initialState = { isSidebarOpen: true, isLoading: false, isEditing: false, todos: [ { id: 1608592490852, todo: "Buy milk", important: false }, { id: 1608592490939,
const initialState = {
isSidebarOpen: true,
isLoading: false,
isEditing: false,
todos: [
{ id: 1608592490852, todo: "Buy milk", important: false },
{ id: 1608592490939, todo: "Take out trash", important: false },
{ id: 1608634291740, todo: "Buy flowers for mom", important: false },
{ id: 1608634291874, todo: "Repair washing machine", important: false },
],
importantTodos: [{ id: 1608634291874, todo: "Repair washing machine" }],};
const handleAction = (e, item) => {
const { id, todo } = item;
const actionName = e.target.getAttribute("name");
if (actionName === actionTypes.addImportant) {
dispatch({ type: actionTypes.addImportant, payload: id });
}
reducer.js:
const reducer = (state, action) => {
const { todos } = state;
switch (action.type) {
case actionTypes.addTodo:
return {
...state,
todos: [...state.todos, { id: action.payload.id, todo: action.payload.todo, important: false }],
};
case actionTypes.addImportant:
const importantTodo = todos.find((item) => item.id === action.payload);
console.log(state);
return {
...state,
todos: [...state.todos, { ...todos, important: true }],
importantTodos: [...state.importantTodos, { id: importantTodo.id, todo: importantTodo.todo }],
};
default:
throw new Error(`No Matching "${action.type}" - action type`);
}};
在向importantTodos添加ToDo时,我还希望在todos数组中将其属性important:false更改为important:true。当前,此代码在以下情况下不更改属性
todos: [...state.todos, { ...todos, important: true }],
行被删除。它只复制所有TODO,并将它们作为新的对象数组存储在TODO数组中。我认为问题出在我的排列操作符上,因为我没有像我所认为的那样对它们进行下移。在另外一个重要的例子中添加这个片段
const updatedTodos = todos.map(todoEl => {
if(todoEl.id === action.payload){
const {id, todo} = todoEl;
return {id, todo, important: true}
}
return todoEl;
})
更新返回语句:
return {
...state,
todos: updatedTodos,
importantTodos: [...state.importantTodos, { id: importantTodo.id, todo: importantTodo.todo }],
};
使用
map()
方法。相关回答:你怎么称呼你的减速机?您的组件结构是什么?等等