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

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

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

15 ответов

13 просмотров

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

Руслан-Красюк Автор вопроса
🅅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
Ну почитай что нибудь про нормализацию данных

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

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

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

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...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта