Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2020, 22:14
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

React, Redux. Cross component interaction
Здравствуйте.

Есть компонент Layout, который рендерит 2 компонента: UserList и OrderCreatePage, эти два компонента подключены к хранилищу Redux.
Нужно сделать так, чтобы пользователя из компонента UserList можно было добавить в заказ drag and drop'ом.

Компонент OrderCreatePage рендерит форму заказа с помощью библиотеки Formik. Эта библиотека хранит свое состояние в изолированном хранилище, однако отследить изменение состояния все таки можно.

Подскажите, пожалуйста, как правильно решать подобные задачи?

Мое решение:
При дропе пользователя в компонент заказа новый пользователь добавляется в хранилище, после чего компонент OrderCreatePage забирает его из хранилища и передает как props в Formik, что вызывает rerender формы.
Чтобы текущие данные формы, на момент дропа пользователя, не были утеряны слушаю изменения состояния Formik и в случае изменения данных формы записываю их в хранилище OrderCreatePage, что вызывает ререндер Formik'а.

Мое решение мне крайне не нравится по нескольким причинам:
- очень много лишних перерисовок;
- иногда все же возникают ошибки (причину не выяснил до сих пор);
- само решение - костыль.
Ответить с цитированием
  #2 (permalink)  
Старый 05.08.2020, 12:20
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

https://codesandbox.io/s/using-refs-...-methods-cps7w
Ответить с цитированием
  #3 (permalink)  
Старый 05.08.2020, 13:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

SuperZen, спасибо за пример, однако это совсем не то, что нужно.
У вас особо смысла то и нет обращаться к детям, чтобы добавить новое значение в values, можно сразу это делать из App компонента.

Вот пример моей структуры: https://codesandbox.io/s/fancy-fast-byl5o
Ответить с цитированием
  #4 (permalink)  
Старый 05.08.2020, 14:33
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Сообщение от Nexus
При дропе пользователя в компонент заказа новый пользователь добавляется в хранилище, после чего компонент OrderCreatePage забирает его из хранилища и передает как props в Formik
Ну сделать тоже самое, обернуть формик в еще один компонент, который слушает изменения в сторе (React.useEffect и т.д.), и вызывать метод как из примера выше... т.е. получается, при первом рендрере берутся данные из пропс, и апдейты через реф....

изменения в формике напрямую не пишут в стор(?)... в стор идет запись после сабмита. зачем тогда дроп писать в стор?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Redux и React. Перенос типов из actions в reducer и логики из reducer в component R2R Библиотеки/Тулкиты/Фреймворки 0 28.04.2019 22:07
виджет комментариев переделать с react на redux melnikov24 Node.JS 1 17.01.2019 12:51
React + Redux не обновляется компонент при изменение store smegol Библиотеки/Тулкиты/Фреймворки 2 15.11.2017 15:07
Front-end разработчик на React (Redux) в международный проект. Eugen2k Работа 3 05.10.2017 11:25
Frontend Developer (JavaScript/HTML/CSS, React, Redux, Webpack), Москва. 160 гросс. Metelitsa Работа 0 23.08.2017 17:19