существующий если я передам например в него setState(user.firstName)?
запишется ровно то что ты передашь
это будет новый обьект со своей выделенной памятью или ссылка на уже существующий?
ну если ты сформируешь новый объект то новый передастся
у меня есть массив объектов, я записываю в state второй элемент этого массива. если я захочу изменить этот второй элемент где то, объект записанный в state тоже изменится или нет?
создавай новый массив всегда когда речь идет об изменении стейта правильной
спасибо большое, уже разобрался. в state записывается ссылка на обьект ф
при чем тут ссылка вообще?
вот не надо использовать массивы объектов. Нужно использовать два разных состояния: что то типа interface Todo { content: string; isChecked: boolean; } interface TodoData { [keys: number]: Todo; } const [todoIdList, setTodoIdList] = useState<number[]>([]); const [todoData, setTodoData] = useState<TodoData>({}); Таким образом, если например по ид необходимо изменить значение полей какого ибо объекта, то это делаеться так (todoId это искомый ид): const currentTodo: Todo = { ...todoData[todoId], isChecked: value }; setTodoData((prev) => ({ ...prev, [todoId]: currentTodo })); А если нам нужно например поменять позицию элементов массива, то todoData вообще не учавствует в этой операции., что очень сильно упрощает собственно алгоритм операции. Если же мы используем массив из элементов вида interface Todo { id: number; content: string; isChecked: boolean; } то простая вещь, по типу поменять значение поля content, значительно усложняется, так как необходимо будет совершить множество лишний действий, как по фильтрации, так и по иммутабельному пересозданию массивов на основе предыдущих значений. Что например к операции по изменению поля элемента вообще не имеет отношения, так как в данном случае для самих объектов с полями значений todoItem порядок вообще не имеет значения.
а если у меня полей 10? десять состояний создавать? например в моем случае у меня есть узлы (объекты в массиве), в этих узлах могу быть дочерние узлы, каждый узел это объект с 10 полями, которые пользователь может изменять, как решить эту задачу?
ДА. СОздавать столько состояний, сколько нужно.
вот только деревья не нужно делать в стейте
а как быть с тем, что в элемента может быть дочерний элемент, который рекурсивно надо изменять
мне надо это сделать, как выйти из ситуации?
Ну почитай что нибудь про нормализацию данных
еще не знаком с этим понятием, утром прочитаю. спасибо)
Обсуждают сегодня