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

У меня есть хук на изменение стейта (там массив с

объектами)
и вот у меня возник вопрос
почему например
console.log(tasks)
setTasks(tasks.filter(e => e.id !== this.id));
console.log(tasks)
почему tasks перед setTasks такой же как и после?

18 ответов

13 просмотров

setState действия являются асинхронными и группируются для повышения производительности. Это объясняется в документации setState.

Pan-Włodzimierz Автор вопроса
Alex
setState действия являются асинхронными и группиру...

а если setState асинхронный, то как я тогда могу сделать например два setState'a. но второй зависящий от первого ?

Pan-Włodzimierz Автор вопроса
Alex
setState действия являются асинхронными и группиру...

например вот setTasks(tasks.map((e, i) => { e.done = i === this.id ? !e.done : e.done; return e; })); setCounter({ tasks: tasks.length, done: tasks.filter(e => e.done).length }); ведь не факт, что setCounter нормально посчитает.

Pan Włodzimierz
например вот setTasks(tasks.map((e, i) => { e.d...

Зачем хранить отдельно counter, если он всегда вычисляется из другого стейта? Неконсистентненько. Если ты можешь вычислить А из B, то нет никакого смысла держать A в стейте — всегда есть актуальное B, из которого A однозначно вычисляется

Pan-Włodzimierz Автор вопроса
Ivan 🧑‍🚀
Зачем хранить отдельно counter, если он всегда выч...

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

Pan-Włodzimierz Автор вопроса
Ivan 🧑‍🚀
Зависимые стейты не должны быть стейтом

не ну и нормально так писать? дважды фильтровать tasks. Напрасная работа, мне кажется

Pan Włodzimierz
screenshot не ну и нормально так писать? дважды фильтровать t...

Нет, ненормально. Нормальнее вот так const tasks = ... setTasks(...) А ещё нормальнее — не хранить длину массива в стейте — ты вместо state.done всегда можешь взять state.tasks.filter(...).length

Pan Włodzimierz
screenshot не ну и нормально так писать? дважды фильтровать t...

А можешь сделать ещё лучше const done = useMemo(() => tasks.filter(...).length, [tasks]) Главное - доку почитай сначала

Pan-Włodzimierz Автор вопроса
Ivan 🧑‍🚀
А можешь сделать ещё лучше const done = useMemo(...

понял не владею информацией на счёт этого, но гляну

Pan Włodzimierz
понял не владею информацией на счёт этого, но глян...

И ради всего святого, не моргай this в функциональных компонентах

Pan-Włodzimierz Автор вопроса
Ivan 🧑‍🚀
И ради всего святого, не моргай this в функциональ...

да я по bind передал контекст вот и использую или лучше как аргумент передавать?

Pan Włodzimierz
да я по bind передал контекст вот и использую или ...

Лучше как аргумент. Разницы никакой, очевидности больше

Pan-Włodzimierz Автор вопроса
Ivan 🧑‍🚀
Лучше как аргумент. Разницы никакой, очевидности б...

onClick={() => props.onDelete(props.task)} или onClick={props.onDelete.bind(null, props.task)}?

Pan Włodzimierz
onClick={() => props.onDelete(props.task)} или onC...

Во втором случае всегда будет возращаться новая функция, потому это считай как первый вариант

Pan Włodzimierz
onClick={() => props.onDelete(props.task)} или onC...

Bind создаёт так же новую функцию

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта