Как обновить редуктор магазина - PullRequest
0 голосов
/ 24 октября 2018

У меня есть такой магазин

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 или добавлю новый, используя этот редуктор

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/

и репо введите описание ссылки здесь

1 Ответ

0 голосов
/ 24 октября 2018

Array.push() меняет исходный массив, это анти-паттерн в редуксе 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 массив

, старайтесь не использовать методы из этого списка в редукторе https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype#Mutator_methods

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...