Обновить стейт в массиве объектов у одного свойства при выполнении условия if

Есть стейт:

const [toDoList, setToDoList] = useState([]);

Массив toDoList такой:

[
  {
    id: '1fb2d52-c24f-45a5-01bf-edc13e78c07f',
    categoryName: 'Категория 1',
    color: 'green',
  },
  {
    id: '4552731-82c-d6c0-2aaa-7ac45f4bc',
    categoryName: 'Категория 2',
    color: 'blue',
  },
  {
    id: 'fa5fe4c-36b5-6dd-d7ac-ca85e7ed3aa1',
    categoryName: 'Категория 3',
    color: 'pink',
  },
];

Мне нужно обновить стейт свойства categoryName...есть заготовка функции

function changeCategoryName(inputValue) {
    const {categoryId, input } = inputValue;
    
  }

Логику вижу такой: при клике на кнопке, происходит вызов функции. В аргументы попадают id категории и значение инпута. Далее нужно пройтись по массиву toDoList сравнивания id из аргументов и у объекта. Если id совпадают то обновить значение свойства categoryName на значение аргумента input. Я не знаю какая правильная запись функции должна быть...знаю что там ...prevState ... помогите пожалуйста.

Суть задачи в том, чтобы сделать возможным изменить имя категории.

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Darkness In me

function changeCategoryName(inputValue) {
    const {categoryId, input } = inputValue;
    setToDoList(prev => 
      prev.map(toDoItem =>
       toDoItem.id === categoryId ? ({
          ...toDoItem,
          categoryName: input
       }) : toDoItem)
    )
  }

→ Ссылка