Size: a a a

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

2021 March 24

S

Snake in React — русскоговорящее сообщество
Не в нем же причина, думаю
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
Snake
При вызове deleteProductItem - productItems является пустым массивом. Соответственно и фильтр возвращает пустой массив
почему пустым массивом?


 useEffect(() => {
   setProductItems(getProductsItem(5));
 }, []);

При первом рендере я как раз заполняю массив, и он же и выводится
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Максим Усачёв
А поясните, плз, подробнее, что происходит на самом деле?
Ты не предаешь зависимости в useCallback, он вызывается всегда с изначальными значениями используемых внутри переменных
источник

S

Snake in React — русскоговорящее сообщество
Максим Усачёв
почему пустым массивом?


 useEffect(() => {
   setProductItems(getProductsItem(5));
 }, []);

При первом рендере я как раз заполняю массив, и он же и выводится
Ну можешь залогировать в deleteProductItem этот массив и убедиться. Но я пока не знаю причины почему так, ищу.
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
ща) самому интересно)))
источник

S

Snake in React — русскоговорящее сообщество
Хотя судя по всему догадываюсь, надо проверить
источник

I

IceBerg in React — русскоговорящее сообщество
Максим Усачёв
Всем привет! Есть такой реакт-код: https://codesandbox.io/s/product-table-and-scroll-qerlp?file=/src/App.js

Проблема: при удалении любой колонки (на скрине показана, как они удаляются) компонент ререндериться (что очевидно, ведь мы же изменили состояние) и в const [productItems, setProductItems] = useState([]); снова записывается пустой массив.

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

P.S: я понимаю, что можно с помощью пропсов и useEffect, но мне интересно именно в текущем компоненте
useState не создает стейт повторно при ререндерах
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
IceBerg
useState не создает стейт повторно при ререндерах
в том-то и дело
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
Snake
Ну можешь залогировать в deleteProductItem этот массив и убедиться. Но я пока не знаю причины почему так, ищу.
да, точняк, хм
источник

S

Snake in React — русскоговорящее сообщество
Ах, кажется понял
источник

S

Snake in React — русскоговорящее сообщество
Минуту
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
Тимофей 🛴
Ты не предаешь зависимости в useCallback, он вызывается всегда с изначальными значениями используемых внутри переменных
Вот проверил, при удалении колонки useCallback вообще НЕ вызывается


 const getProductsItem = useCallback((count) => {
   console.log("2.1: ", count);
источник

I

IceBerg in React — русскоговорящее сообщество
Максим Усачёв
в том-то и дело
в чем? Я о том, что не он тебе пустой массив создает, проверь свой фильтр
источник

ES

Eugene Stepanyuk in React — русскоговорящее сообщество
подскажите пожалуйста, у кого есть опыт работы с компонентами antd. Можно ли между шапкой таблицы и первой строкой с данными вставить строку, объединяющую в себе все столбцы (получится один столбец на всю строку). Либо в шапку в самый низ добавить строку с названием?
источник

ES

Eugene Stepanyuk in React — русскоговорящее сообщество
источник

DP

Den Pol in React — русскоговорящее сообщество
Подскажите по настройке tsconfig.json.
Как переместить yaml файлы вместе с компилируемыми файлами ts -> js? ts их игнорит.
источник

I

IceBerg in React — русскоговорящее сообщество
Максим Усачёв
const [productItems, setProductItems] = useState([]);

 const deleteProductItem = (id) => {
   setProductItems([...productItems.filter((item) => item.props.id !== id)]);
 };
оборачивание в массив спредом здесь лишнее, кстати
источник

МУ

Максим Усачёв... in React — русскоговорящее сообщество
IceBerg
оборачивание в массив спредом здесь лишнее, кстати
да, это я уже понял, мне выше подсказали, спасибо!
источник

S

Snake in React — русскоговорящее сообщество
Так, тут как к голосовухам относятся? Лень много печатать для ответа
источник

E

Evgeniy 🍀 in React — русскоговорящее сообщество
Максим Усачёв
Всем привет! Есть такой реакт-код: https://codesandbox.io/s/product-table-and-scroll-qerlp?file=/src/App.js

Проблема: при удалении любой колонки (на скрине показана, как они удаляются) компонент ререндериться (что очевидно, ведь мы же изменили состояние) и в const [productItems, setProductItems] = useState([]); снова записывается пустой массив.

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

P.S: я понимаю, что можно с помощью пропсов и useEffect, но мне интересно именно в текущем компоненте
я бы начал с того, чтобы надо переписать нормально - сейчас это даже прочитать тяжело, не говоря уже о том, чтобы понять как оно работает.
источник