Javascript 如何更新reducer存储
我有这样的商店Javascript 如何更新reducer存储,javascript,arrays,reactjs,object,react-redux,Javascript,Arrays,Reactjs,Object,React Redux,我有这样的商店 export const list = [ { id: 0, tableName: 'example', tasks: [ { task_id: 0, task_short: 'lorem', task_full: 'lorem ipsum lorem ipsum lorem ipsum',
export const list = [
{
id: 0,
tableName: 'example',
tasks: [
{
task_id: 0,
task_short: 'lorem',
task_full: 'lorem ipsum lorem ipsum lorem ipsum',
time_created: '10:20',
time_created: null,
},
{
task_id: 1,
task_short: 'andsf',
task_full: 'lorem ipsum tes tes est',
time_created: '13:20',
time_created: null,
}
]
}
]
如果我更改表名或使用此减速机添加新表名
import { list } from './list'
export default (state = list, action) => {
const { type, payload } = action
switch(type) {
case 'ADD_TABLE':
return [...state, payload]
case 'DELL_TABLE':
return state.filter( ( tabl ) => tabl.id != payload )
case 'CHANGE_TITLE':
let basket = state.map( bas => bas.id == payload.id ? bas.tableName = payload.val : bas )
return [...state]
case 'ADD_TASK':
const newer = state.map( tas => tas.id == payload.id ? tas.tasks.push(payload.t) : tas)
return [...state]
default:
return state
}
}
一切都好
但如果我在任务中推送新任务,它将存储在控制台中,但不会呈现
为了使其呈现,我必须更改tableName,并在它全部显示之后
我想问题出在这里了
case 'ADD_TASK':
const newer = state.map( tas => tas.id == payload.id ? tas.tasks.push(payload.t) : tas)
return [...state]
这是演示
和repoArray.push()
更改初始数组,这是redux中的反模式
你应该换一行
const newer=state.map(tas=>tas.id==payload.id?tasks.push(payload.t):tas)
在这个问题上
const newer=state.map(tas=>tas.id==payload.id?[…task.tasks,payload.t]:tas)
因此,您不会对初始task.tasks
数组进行变异
尽量不要在reducer中使用这个列表中的方法,我像你写的那样做了更改,但仍然是一样的:(我理解了这个问题,你把
state.map
的结果保存在newer
中,但是返回[…state]
所以试试返回state.map(tas=>tas.id==payload.id?[…tasks,payload.t]:tas)
TypeError:无法读取未定义TaskItem.render src/components/task/TaskItem.js:11 8 | const{parentID,task}=this.props 9 |//console.log(task)10 |>11 | const TaskItem=task.map(task=>^12 |{task.task|short}
13})当我使用精灵推动时,它只返回阵列任务,哦,朋友,非常感谢!!!))我爱你。))这是昨天早上卡住的,嗯。。我很高兴=)