Size: a a a

React — русскоговорящее сообщество

2021 January 27

A

Andrew in React — русскоговорящее сообщество
Triada
стор
=ты имеешь в виду редакс?
да
источник

A

Andrew in React — русскоговорящее сообщество
Triada
А можно примеры?
Я пробовал использовать коллбек, но приложение выдавало ошибку что ререндеров больше чем в предыдущий раз, или что-то такое
можно скрины кода ггде оно у вас не так работает
источник

T

Triada in React — русскоговорящее сообщество
Adel Gilyazeev
он не может медленно работать.... У тебя либо ошибка в логике, либо огромные вычесления
у меня такой код
console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');

первый консольлог выдает 0.01 сек
второй - 0.2 сек
источник

A

Andrew in React — русскоговорящее сообщество
Adel Gilyazeev
он не может медленно работать.... У тебя либо ошибка в логике, либо огромные вычесления
полностью согласен
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
а где он?
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
где этот код?
в рендере?
источник

A

Andrew in React — русскоговорящее сообщество
Triada
у меня такой код
console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');

первый консольлог выдает 0.01 сек
второй - 0.2 сек
это просто обновление данных, оно даже примерно не опишет проблему
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
код компонента родителя и компонента ребенка в студию
источник

И

Иван in React — русскоговорящее сообщество
у них очень крутой туториал, прям праздник какой-то
источник

A

Andrew in React — русскоговорящее сообщество
Triada
у меня такой код
console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');

первый консольлог выдает 0.01 сек
второй - 0.2 сек
Нельзя обновлять просто так стейт в рендере и методах жизненного цикла
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
Triada
у меня такой код
console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');

первый консольлог выдает 0.01 сек
второй - 0.2 сек
у тебя каждый рендер newState заного пересобирается
источник

T

Triada in React — русскоговорящее сообщество
это в функции, забыл две строки добавить
источник

T

Triada in React — русскоговорящее сообщество
  const onRowUpdated = (e) => {
   console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');
 };
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
а она у тебя где вызывается?
источник

T

Triada in React — русскоговорящее сообщество
и функция дальше прокидывается в компонент таблицы, где вызывается при изменении ячейки
источник

И

Иван in React — русскоговорящее сообщество
Triada
  const onRowUpdated = (e) => {
   console.time('newstate');
   const newState = [
     ...testResults.map((i) =>
       i.Id === e.key
         ? {
             ...e.data,
             isModified: true,
           }
         : i
     ),
   ];
   console.timeEnd('newstate');
   console.time('setstate');
   setTestResults(newState);
   console.timeEnd('setstate');
 };
[...testResults.map(...)] — достаточно бесполезный способ погреть процессор. map уже возвращает новый массив
источник

T

Triada in React — русскоговорящее сообщество
да, согласен. Поправлю
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
это в виртуальном компоненте у тебя работает?
источник

A

Andrew in React — русскоговорящее сообщество
проблема можкт быть как  в использовании внутри этой функции так и в том что используется она чаще чем обновляются данные
используйте в setState коллбек функцию для изменения
источник

AG

Adel Gilyazeev in React — русскоговорящее сообщество
тебе надо избавиться от пересоздания огромных массивов данных
источник