React, Redux. Cross component interaction
Здравствуйте.
Есть компонент Layout, который рендерит 2 компонента: UserList и OrderCreatePage, эти два компонента подключены к хранилищу Redux.
Нужно сделать так, чтобы пользователя из компонента UserList можно было добавить в заказ drag and drop'ом.
Компонент OrderCreatePage рендерит форму заказа с помощью библиотеки Formik. Эта библиотека хранит свое состояние в изолированном хранилище, однако отследить изменение состояния все таки можно.
Подскажите, пожалуйста, как правильно решать подобные задачи?
Мое решение:
При дропе пользователя в компонент заказа новый пользователь добавляется в хранилище, после чего компонент OrderCreatePage забирает его из хранилища и передает как props в Formik, что вызывает rerender формы.
Чтобы текущие данные формы, на момент дропа пользователя, не были утеряны слушаю изменения состояния Formik и в случае изменения данных формы записываю их в хранилище OrderCreatePage, что вызывает ререндер Formik'а.
Мое решение мне крайне не нравится по нескольким причинам:
- очень много лишних перерисовок;
- иногда все же возникают ошибки (причину не выяснил до сих пор);
- само решение - костыль.
|