169 похожих чатов

Подскажите пожалуйста, в state записывается новый обьект или ссылка на

существующий если я передам например в него setState(user.firstName)?

15 ответов

38 просмотров

запишется ровно то что ты передашь

Руслан-Красюк Автор вопроса
🅅aleriy 🄺obzar
запишется ровно то что ты передашь

это будет новый обьект со своей выделенной памятью или ссылка на уже существующий?

Руслан Красюк
это будет новый обьект со своей выделенной памятью...

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

Руслан-Красюк Автор вопроса
🅅aleriy 🄺obzar
ну если ты сформируешь новый объект то новый перед...

у меня есть массив объектов, я записываю в state второй элемент этого массива. если я захочу изменить этот второй элемент где то, объект записанный в state тоже изменится или нет?

Руслан Красюк
у меня есть массив объектов, я записываю в state в...

создавай новый массив всегда когда речь идет об изменении стейта правильной

Руслан-Красюк Автор вопроса
🅅aleriy 🄺obzar
создавай новый массив всегда когда речь идет об из...

спасибо большое, уже разобрался. в 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 порядок вообще не имеет значения.

Руслан-Красюк Автор вопроса
cool29horhoj
вот не надо использовать массивы объектов. Нужно ...

а если у меня полей 10? десять состояний создавать? например в моем случае у меня есть узлы (объекты в массиве), в этих узлах могу быть дочерние узлы, каждый узел это объект с 10 полями, которые пользователь может изменять, как решить эту задачу?

Руслан Красюк
а если у меня полей 10? десять состояний создавать...

ДА. СОздавать столько состояний, сколько нужно.

Руслан-Красюк Автор вопроса
cool29horhoj
ДА. СОздавать столько состояний, сколько нужно.

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

Руслан-Красюк Автор вопроса
🅅aleriy 🄺obzar
вот только деревья не нужно делать в стейте

мне надо это сделать, как выйти из ситуации?

Руслан Красюк
а как быть с тем, что в элемента может быть дочерн...

Ну почитай что нибудь про нормализацию данных

Руслан-Красюк Автор вопроса
cool29horhoj
Ну почитай что нибудь про нормализацию данных

еще не знаком с этим понятием, утром прочитаю. спасибо)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта