Поискал ещё инфу, не могу понять в чем дело. (task - элемент стора, newTask - новое значение)
потому что в первом случае ты просто меняешь значение переменной, а во втором мутируешь объект по ссылке и оба варианты неправильные, менять нужно стейт, а аргументы функции только для чтения
Окей, можешь пожалуйста подсказать, как тут заменить объект таски? Не могу никак разобраться
state.tasks = state.tasks.map((task) => { return task.id === id ? newTask : task; }); или findIndex + splice
Спасибо большое. А такой вопрос, почему нельзя мутировать? Вроде бы vuex позволяет это делать
это не vuex позволяет, а JS а нельзя, потому что это неявно и это сложно отслеживать, в мутацию первым параметром специально прилетает стейт, который и нужно менять
Ну, просто если смотреть с стороны производительности, то изменить один объект на другой намного быстрее, чем делать поиск по огромному массиву задач
тут гораздо проще наступить на грабли, чем кажется на первый взгляд объект, который ты передаешь в параметрах, может иметь одну и ту же ссылку с объектом в списке тасок, а может и не иметь, если ее разорвали где-то раньше если ссылки будут разные, то мутация свойства просто не повлияет на реальный объект тасок и ты будешь очень долго искать, в чем же у тебя причина можешь попробовать просто в своем примере, где ты мутируешь свойство по ссылке, сделать копию объекта перед тем, как передавать ее в мутацию
Обсуждают сегодня