2018-01-01 Всё-таки Redux - отстой
Всё-таки Redux кривоват.
Ну просто вот пример — есть там, не знаю, в приложении таблица «города», и надо сделать компонент подсказки городов — автокомплит.
Есть библиотечный автокомплит, поверх к нему, соответственно, надо дописать функцию, которая подгружает сами данные, чтобы дальше использовать в ДВУХ и более местах приложения БЕЗ копипастинга. Например просто два поля подряд даже вставить — ну типа город1, город2, или город юзера / город компании, или ещё что-нибудь.
Состояние у автокомплита — это:
- введённый текст (не обязательно совпадающий с выбранным значением)
- текущие подгруженные опции
- выбранное значение (но оно, по идее — не его личное состояние, а кусок тех данных, которые собственно редактируются в этом поле)
И действия:
- обработать изменение введённого текста (подождать 200мс, отправить запрос на подгрузку опций)
- обработать ответ на запрос подгрузки — залить опции в состояние
- обработать событие выбора опции — залить выбранное значение в состояние
Вопрос: КУДА всё это пихать?
Если Redux, то Redux говорит, что вроде как ВСЁ пихать в Store. Но Store глобальный => получается, что когда ты вставляешь в ДВА или более места свой компонент, ты должен:
- заставить его брать данные из РАЗНЫХ мест из стора
- заставить его отправлять Reducer’у какие-то ДРУГИЕ действия (по-другому именованные видимо — типа «field1_load_autocomplete», «field2_load_autocomplete»)
- потом ещё и заставить Reducer(ы) их обрабатывать
Получается, что по идее ради 1 и 2 ты, как минимум, занимаешься копипастингом mapStateToProps/mapDispatchToProps/connect(), а ради 3 ты ещё и копипастишь обработчик action’а, или подключение обработчика, возможно через combineReducers(), но всё равно тебе как минимум один action в нём придётся как-то переопределить — чтобы значение-то итоговое сохранять туда, куда нужно.
Вопрос: НА#УЯ всё это надо?
Если с голым React’ом ты просто все эти обработчики ляпнешь прямо в компоненте, и стейт будет там же, а значение наружу будет передаваться колбэком.
И в этом случае чтобы повторно использовать компонент ты как бы да, просто напишешь <CityAutocomplete value=... onChange=... />.
Не, я понимаю, что ВРОДЕ типа кажется круто полностью отделить работу с данными от рендера, ВРОДЕ типа круто при серверсайд рендеринге (подгрузил состояние и продолжил с того же момента), при извращениях типа живой отладки с сохранением состояния при изменении кода…
Но если при этом теряется переиспользуемость компонентов — это какое-то фуфло.
Короче, резюме: React, похоже, надо юзать голый, БЕЗ Redux’а.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.