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

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

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

18 ответов

5 просмотров

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 создаёт так же новую функцию

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

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

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Дорогие любители Прекрасной Джулии! Есть кто-то имеющий практический опыт построения ML для Систем Управления? Нам нужно сделать нейросеть для автоматической подстройки пара...
Roman Timo
4
С той же поддержкой Android в тулчейне, если кому интересно. На Swift Forums шло убогое обсуждение всякой херни годами, но ничего годного так и не появлялось. Пришел vgorloff ...
iMike
1
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Приветствую ребята,у меня база есть,прорешал много задач с литкода,там деревья,списки, бэктрэкинг и все остальное,что мне сейчас делать?есть может куда устроиться поработать,е...
Aקuст Lеתסuд Aקuст Lеתסuд
5
Всех приветствую. Направьте меня в нужное русло. Постепенно переписываю проект с delphi на lazarus. Приложение - обычный windows/linux клиент для бд firebird. Тут все хорошо. ...
Mishutka
4
Anybody want this chat app? If anybody interested dm  me.. Note - Firstly payment then i send you code but i will show work on gmeet.
Rayyan Ahmad
5
Карта сайта