Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改state React.js中的属性_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 更改state React.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,

我正在React中使用Todo应用程序,我需要一些帮助。这可能是一个微不足道的问题,但我不知道怎么做

context.js:

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()
方法。相关回答:你怎么称呼你的减速机?您的组件结构是什么?等等