Сценарий: Я хочу расширить существующий компонент React и доставить его в виде автономного компонента.ReactJS: jQuery как компоненты, созданные с помощью Flux
Возьмем, к примеру, Facebook FixedDataTable
(https://github.com/facebook/fixed-data-table), добавим некоторые дополнительные функции и оберните его в качестве повторно используемого компонента.
Первая дополнительная функция будет «множественный выбор строки» - демо можно найти здесь http://goo.gl/qRE9eB
Что кто-то может заметить здесь, что MovieTable
обертка обрабатывает проверенное/не проверяется состояние строк. Итак, что я хочу сделать дальше, это делегировать ответственность за обработку состояния в хранилище Flux (для простоты рассмотрим реализацию Facebook Flux https://github.com/facebook/flux). Вероятно, сейчас это не имеет особого смысла, но поскольку сложность MovieTable
растет (сортировка, бесконечная прокрутка и т. Д.), Интеграция Flux была бы необходима. Согласно архитектуре Flux (Action -> Dispatcher -> Store -> View), _onRowClick
и _onCheckAll
будут запускать действия, которые позволят Храните сохранять состояние и уведомлять представление о том, что что-то было изменено, для того, чтобы представление повторно отображалось новое состояние флажка.
Предположим, что я хочу связать вид MovieTable
вместе со своими действиями/диспетчером/хранилищем как автономный компонент, чтобы впоследствии его можно было повторно использовать. Первый вопрос:
1) Имеет ли смысл объединить представление/действия/диспетчер/хранилище в качестве автономного компонента? С моей точки зрения, преимущества очевидны: тот, который использует компонент, не нуждается в заботе о «внутренних компонентах» компонента (например, выбор строки, бесконечная прокрутка, сортировка и т. Д.)
Давайте рассмотрим что я решил собрать все вместе. Следующие вопросы:
2) Как я могу получить данные из магазина? например некоторым частям приложения может потребоваться получить все выбранные строки из хранилища компонента
3) Как я могу активировать действия на диспетчере компонента? например Я хочу программно проверить некоторые строки. Сначала я думал, что клиент должен иметь доступ к действиям компонента
4) Учитывая данные 1), 2) и 3), я хочу иметь повторно используемый компонент DataTable что «чувствует» как традиционный компонент jQuery (например, jqGrid http://goo.gl/b7jPo3). Конечной целью было бы объединить jQuery как компоненты с компонентами React на той же странице, не вызывая слишком большой боли тому, что их смешивает.
Благодарим за ответ! Чтобы узнать, что публичный API должен выглядеть как минимум для компонента React: a) средства настройки реквизита или методов (например, ' ' b) реквизиты или методы как обратные вызовы (например, '
Так как c) не может быть спорным, поскольку есть единственный способ разоблачить геттеры, я бы взглянул на a) и b). Давайте посмотрим, какие преимущества предлагает «реквизит» способ предоставления данных (включая обратные вызовы): - хорошо интегрируется с жизненным циклом компонентов: 'propTypes',' getDefaultProps() ',' componentWillReceiveProps() 'и т. Д. - это просто помнить, как взаимодействовать с компонентом: не нужно думать, какое поведение компонента должно быть указано как поддержка и которое как метод –
- учитывая тот факт, что компонент повторно отображает себя каждый раз, когда что-то изменилось, я бы подумал, что это больше похоже на вызов конструктора каждый раз, а не вызов конструктора только один раз, а затем вызов сеттеров для каждого изменения, которое должно быть отражено. Я не вижу недостатков в «реквизитах» - если вы могли бы поделиться несколькими, это было бы замечательно. –