Props или State, если будет только одно обновление?

В приложении древовидная структура компонентов, конечные, самые глубокие, назову «листиками». Листики имеют id, которые сохраняются в приложении. А также с внешнего сервиса по этим id получают доп. данные: напр. аватарку и ссылку.

Изначально приложение получает данные, по которым строится это дерево, и только id для конечных узлов, этих листиков. И тут надо запросить доп. данные с внешнего сервиса, чтобы правильно отрисовать эти листики. Т.о. у него бывает два состояния: свежесозданный, с только-id, и получивший все данные с внешнего сервиса чуть позже. Пользователь доп. данные никак не меняет, они нужны только для отображения.

Когда пользователь добавляет новые ветви, а затем «вешает» на них новые листики, всё то же: сначала только id, затем запрос и доп. данные в перерисовку листика.

Вопрос: следуя философии ReactJS, следует ли передавать id по цепочке props, а запрос доп. данных инициировать в каждом из листиков индивилуально, а полученные доп. данные хранить в state; или всё передавать из корня всего приложения через props по всему каскаду вложенных компонентов; или как-то ещё?
  • Вопрос задан
  • 1495 просмотров
Решения вопроса 1
Хорошим решением будет сделать некоторые компоненты вверху дерева как Controller-View, которые будут иметь state и получать данные, а в остальном старайтесь делать компоненты stateless (док).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
finnish
@finnish
React.js настолько гибок, что развязывает нам руки: каждый способен придумать своё оригинальное решение. С приходом Flux и его хранилищ, я стал использовать принцип передавать через props минимальный набор данных; всё что компонент может взять сам, пусть сам и берёт. Таким образом, компонент у меня чаще всего получает только id, а при рендере недостающие данные он самостоятельно получит из внешних источников.
В Вашем случае, если внешних источников нет, сохраняйте данные прямо в state компонента.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы