Как поменять объект? - PullRequest
       7

Как поменять объект?

0 голосов
/ 25 октября 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: null,
                time_changed: null, 
            },
            {
                task_id: 1, 
                task_short: 'andsf',
                task_full: 'lorem ipsum tes tes est',
                time_created: null,
                time_changed: null, 
            }
        ]
    }
]

в полезной нагрузке шахты имеется три свойства

case 'CHANGE_TASK':
        ///////update, ownId, parentId

В обновление Я, например, изменил задачи [0]

И после этого я не могу решить, как изменить и вернуть список

Ответы [ 2 ]

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

Я бы сделал это, используя композицию редуктора, например:

const list = [{
  id: 0,
  tableName: 'example',
  tasks: [{
      task_id: 0,
      task_short: 'lorem',
      task_full: 'lorem ipsum lorem ipsum lorem ipsum',
      time_created: null,
      time_changed: null,
    },
    {
      task_id: 1,
      task_short: 'andsf',
      task_full: 'lorem ipsum tes tes est',
      time_created: null,
      time_changed: null,
    }
  ]
}]

const topReducer = (state, action) => {
  switch (action.type) {
    case "UPDATE_TASK":
      return state.map(listReducer(action));
    default:
      return state;
  }
}

const listReducer = action => state => {
  if (action.id !== state.id) {
    return state;
  }
  switch (action.type) {
    case "UPDATE_TASK":
      return {
        ...state,
        tasks: state.tasks.map(taskReducer(action))
      }
    default:
      return state;
  }
}

const taskReducer = action => state => {
  if (action.task_id !== state.task_id) {
    return state;
  }
  switch (action.type) {
    case "UPDATE_TASK":
      return { ...state,
        ...action.update
      };
    default:
      return state;
  }
}

const action = {
  type: "UPDATE_TASK",
  task_id: 0,
  id: 0,
  update: {
    task_short: 'ipsum',
  }
}

console.log(topReducer(list, action))
0 голосов
/ 25 октября 2018

Вы можете сделать следующее, чтобы достичь того, что вы ищете.

Но я могу заверить, что это не лучшая практика,

Держите ваше состояние в норме, не вкладывайте объект.

const list = [{
  id: 0,
  tableName: 'example',
  tasks: [{
      task_id: 0,
      task_short: 'lorem',
      task_full: 'lorem ipsum lorem ipsum lorem ipsum',
      time_created: null,
      time_changed: null,
    },
    {
      task_id: 1,
      task_short: 'andsf',
      task_full: 'lorem ipsum tes tes est',
      time_created: null,
      time_changed: null,
    }
  ]
}]

const parentId = 0;

const ownId = 1;

const update = {
  task_short: 'Updated andsf',
  task_full: 'Updated lorem ipsum tes tes est',
}

const newList = list.map(item => {
  if (item.id === parentId) {
    return {
      ...item,
      tasks: item.tasks.map(task => {
        if (task.task_id === ownId) {
          return {
            ...task,
            ...update,
          }
        }
        return task;
      })
    }
  }
  return item;
})

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