Вы правильно поняли первую часть:
Да mapStateToProps
имеет состояние Store в качестве аргумента / параметра (предоставляетсяreact-redux::connect
) и используется для связывания компонента с определенной частью состояния хранилища.
Под связью я подразумеваю, что возвращаемый объект mapStateToProps
будет предоставлен во время строительства в качестве реквизита, и любые последующие изменения будут доступны через componentWillReceiveProps
.
Если вы знаете шаблон проектирования Observer, то это именно то или иное его изменение.
Пример поможет прояснить ситуацию:
import React, {
Component,
} from 'react-native';
class ItemsContainer extends Component {
constructor(props) {
super(props);
this.state = {
items: props.items, //provided by connect@mapStateToProps
filteredItems: this.filterItems(props.items, props.filters),
};
}
componentWillReceiveProps(nextProps) {
this.setState({
filteredItems: this.filterItems(this.state.items, nextProps.filters),
});
}
filterItems = (items, filters) => { /* return filtered list */ }
render() {
return (
<View>
// display the filtered items
</View>
);
}
}
module.exports = connect(
//mapStateToProps,
(state) => ({
items: state.App.Items.List,
filters: state.App.Items.Filters,
//the State.App & state.App.Items.List/Filters are reducers used as an example.
})
// mapDispatchToProps, that's another subject
)(ItemsContainer);
Может существовать другой компонент реагирования, называемый itemsFilters
обработчиком отображения и сохраняющий состояние фильтра в состоянии Redux Store, демо-компонент «прослушивает» или «подписывается» на фильтры состояния Redux Store, поэтому всякий раз, когда фильтры сохраняют изменения состояния (с помощью filtersComponent
), реагируют -redux обнаруживает, что произошло изменение, и уведомляет или «публикует» все прослушивающие / подписанные компоненты, отправляя изменения в ихcomponentWillReceiveProps
которые в этом примере вызовут повторный фильтр элементов и обновят отображение из-за того, что изменилось состояние реакции ,
Дайте мне знать, если пример сбивает с толку или недостаточно ясен, чтобы дать лучшее объяснение.
Что касается: Это означает, что состояние, используемое вашим целевым компонентом, может иметь совершенно отличную структуру от состояния, которое хранится в вашем магазине.
Я не получил вопрос, но просто знаю, что состояние реакции ( this.setState
) полностью отличается от состояния магазина Redux!
Состояние реакции используется для обработки перерисовки и поведения компонента реакции. Состояние реакции содержится исключительно для компонента.
Состояние Redux Store представляет собой комбинацию состояний редукторов Redux, каждое из которых отвечает за управление небольшой частью логики приложения. Эти атрибуты редукторов могут быть доступны с помощью react-redux::connect@mapStateToProps
любого компонента! Что делает состояние хранилища Redux доступным для всего приложения, в то время как состояние компонента является эксклюзивным для самого себя.