Это технически правильно, что вам не нужно использовать внутреннее состояние компоненты РЕАКТА в создайте приложение React. Конечно, данные должны жить где-то, поэтому вам нужен механизм, который может передавать все данные в компонент верхнего уровня (где он будет просачиваться во все остальные компоненты) при изменении данных.
Это основная идея флюса (и многие другие шаблоны, предназначенные для хранения хранилищ за пределами хранилища). У вас есть один или несколько магазинов, и магазины предоставляют события изменения, когда их данные изменяются. Затем эти данные передаются в приложение через реквизиты.
function render(data) {
ReactDOM.render(
<Application data={data} />,
containerNode
)
}
myDataStore.on('change', render);
На практике, однако, это может быть трудно сделать это из-за того, как работает JavaScript. Код, подобный приведенному выше, заставит React повторно отобразить все дерево компонентов каждый раз, когда изменяется myDataStore
, и без хороших крючков shouldComponentUpdate
это может быть проблемой производительности. Использование неизменяемых значений помогает упростить реализацию хороших методов shouldComponentUpdate
.
Что вы обычно видите в большем React приложение, которое использует снаружи из-React хранения данных представляет собой сочетание:
- Один или более "container" components, которые несут ответственность за получение данных от магазинов и передавая их своим детям. Иногда имеет смысл помещать контейнеры где-нибудь , другие, чем сама вершина дерева компонентов (например, у вас может быть несколько контейнеров в одном приложении)
- Многоразовые/"презентационные" компоненты, которые не подключаются к хранилищу данных, но предоставляют некоторые другие преимущества (например, стили черного цвета или интерактивный виджет). В этих случаях часто имеет смысл поддерживать любое не зависящее от приложения состояние внутри самого компонента.
Любое приложение нуждается в «состоянии», без «состояния» у вас нет данных, и без данных вы ничего не можете сделать. Что вы подразумеваете под «без государства»? –
@MadaraUchiha Im, являющийся специфическим для React.js. Компонент React может иметь неизменяемое состояние, которое сохраняет значение/s. Всякий раз, когда происходит изменение состояния, компонент повторно отображается автоматически. – Kayote
Правильно, как вы планируете предоставлять свои компоненты без такого состояния? –