【问题标题】:How to update reducer store如何更新减速器商店
【发布时间】:2019-03-28 19:20:10
【问题描述】:

我有这样的商店

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, 
            }
        ]
    }
]

如果我更改 tableName 或使用此 reducer 添加新的

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
    }
}

一切正常!!

但如果我在 tasks 中推送新任务,它会在控制台中存储,但不会呈现。

为了让它呈现,我必须改变 tableName ,然后它就会出现

我想问题在这里

case 'ADD_TASK':
                const newer = state.map( tas =>  tas.id == payload.id ? tas.tasks.push(payload.t) : tas)
                return [...state]

这里是演示 http://kanban.antus.pro/

和回购enter link description here

【问题讨论】:

    标签: javascript arrays reactjs object react-redux


    【解决方案1】:

    Array.push() 更改初始数组,这是 redux 中的反模式https://redux.js.org/faq/immutabledata

    你应该改变这一行

    const newer = state.map( tas => tas.id == payload.id ? tas.tasks.push(payload.t) : tas)

    关于这个

    const newer = state.map( tas => tas.id == payload.id ? [...tas.tasks, payload.t] : tas)

    所以你不会改变初始 tas.tasks 数组

    尽量不要在 reducer https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype#Mutator_methods 中使用此列表中的方法

    【讨论】:

    • 我像你写的那样改变了,但还是一样:(
    • 我明白了这个问题,你把state.map的结果保存在newer,但是返回[...state]所以试试return state.map( tas => tas.id == payload.id ? [...tas.tasks, payload.t] : tas)
    • TypeError: 无法读取未定义 TaskItem.render src/components/task/TaskItem.js:11 8 | 的属性“地图”常量 { parentID,任务 } = this.props 9 | //console.log(任务) 10 | > 11 | const taskItem = task.map(task => | ^ 12 |

      {task.task_short}

      13 | )
    • 当我使用精灵推送时,它只返回数组 tasks,
    • 哦,伙计,非常感谢!!!))))我爱你)))这个卡住是昨天早上的,呵呵..我很高兴=)
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2016-02-06
    • 1970-01-01
    • 2018-06-29
    • 2018-08-08
    • 2014-03-11
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多