Javascript 如何在reducer中的数组索引处添加对象
我有带数组的存储(Javascript 如何在reducer中的数组索引处添加对象,javascript,arrays,redux,react-redux,redux-store,Javascript,Arrays,Redux,React Redux,Redux Store,我有带数组的存储(store.calendar[0]。TODO[{title:title,etc..}]) 我需要将操作对象添加到数组的索引TODO中: 我已尝试使用此减速器,但出现错误: state.calendar[newTodo.day].concat不是函数 我的减速机: let initialState = { calendar: []} for (let i = 1; i <= 30; i++) { initialState.calendar.push({ todos:
store.calendar[0]。TODO[{title:title,etc..}]
)
我需要将操作对象添加到数组的索引TODO中:
我已尝试使用此减速器,但出现错误:
state.calendar[newTodo.day].concat不是函数
我的减速机:
let initialState = { calendar: []}
for (let i = 1; i <= 30; i++) {
initialState.calendar.push({ todos: []});
}
const todosReducer = (state = initialState, action) => {
switch (action.type) {
case ADD_TODO:
const newTodo = action.todoItem;
const newStore = {...state,
todos: state.calendar[newTodo.day].concat(newTodo)};
return newStore;
default:
return state
}
}
export default todosReducer;
我的添加待办事项功能:
const handleSaveTodo = () => {
props.addTodo({
day: 5,
title: trackInput.value,
description: trackTextarea.value,
completed: false
});
}
请尝试
state.calendar[newTodo.day].todo.concat(newTodo)
。我认为您正在尝试将.concat()添加到对象{todo:Array(0)}上,而不是其中的数组。您可以尝试以下操作:
减速器:
const initialState={
日历:数组.from({length:30},()=>({todos:[]}))
}
const todosReducer=(状态=初始状态,操作)=>{
开关(动作类型){
案例添加待办事项:
const{todoItem}=动作;
const newCalendar=[…state.calendar];
newCalendar[todoItem].todos.push(todoItem);
返回{
……国家,
日历:新日历
}
违约:
返回状态
}
}
将默认值导出到dosReducer代码>您需要以完全不变的方式更改您的状态。
为此,您必须复制日历阵列、在此日历中更新的日期以及附加到的待办事项列表
首先获取日期
和待办事项
,您可以使用解构:
const { todoItem } = action;
const { day } = todoItem;
然后复制您的日历,您可以使用spread语法:
const calendar = [...state.calendar];
然后用当天的副本更新相关日期,并将新的todo附加到todo列表中:
calendar[day] = { ...calendar[day], todos: [...calendar[day].todos, todoItem] };
然后返回更新状态:
return { ...state, calendar };
以下是一个例子:
const ADD_TODO='ADD TODO';
const initialState={calendar:Array.from({length:30},(u,i)=>({todos:[]}));
const todosReducer=(状态=初始状态,操作)=>{
开关(动作类型){
案例添加待办事项:
const{todoItem}=动作;
const{day}=todoItem;
const calendar=[…state.calendar];
日历[日]={…日历[日],待办事项:[…日历[日]。待办事项,待办事项]};
返回{…状态,日历};
违约:
返回状态
}
}
让状态=初始状态;
state=todosReducer(state,{type:ADD_TODO,todoItem:{day:0,title:'TODO day 1'}});
state=todosReducer(state,{type:ADD_TODO,todoItem:{day:1,title:'TODO day 2'}});
state=todosReducer(state,{type:ADD_TODO,todoItem:{day:2,title:'TODO day 3'}});
state=todosReducer(state,{type:ADD_TODO,todoItem:{day:2,title:'second TODO day 3'}});
log(state.calendar.slice(0,3))代码>
calendar[day] = { ...calendar[day], todos: [...calendar[day].todos, todoItem] };
return { ...state, calendar };