Du hast den ersten Teil richtig verstanden:
Ja mapStateToProps
hat den Speicherstatus als Argument / Parameter (bereitgestellt von react-redux::connect
) und wird verwendet, um die Komponente mit einem bestimmten Teil des Speicherstatus zu verknüpfen.
Mit Verknüpfung meine ich, dass das von zurückgegebene Objekt zum mapStateToProps
Zeitpunkt der Erstellung als Requisiten bereitgestellt wird und jede nachfolgende Änderung über verfügbar ist componentWillReceiveProps
.
Wenn Sie das Observer-Entwurfsmuster kennen, ist es genau das oder eine kleine Variation davon.
Ein Beispiel würde helfen, die Dinge klarer zu machen:
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);
Es kann eine andere Reaktionskomponente namens genannt werden itemsFilters
, die die Anzeige verwaltet und den Filterstatus im Redux Store-Status beibehält. Die Demo-Komponente "hört" oder "abonniert" Redux Store-Statusfilter, sodass immer dann, wenn Filter den Status ändern (mit Hilfe von filtersComponent
) reagieren -redux erkennt, dass eine Änderung aufgetreten ist, und benachrichtigt oder "veröffentlicht" alle abhörenden / abonnierten Komponenten, indem die Änderungen an componentWillReceiveProps
diese gesendet werden. In diesem Beispiel wird ein Refilter der Elemente ausgelöst und die Anzeige aktualisiert, da sich der Reaktionsstatus geändert hat .
Lassen Sie mich wissen, ob das Beispiel verwirrend oder nicht klar genug ist, um eine bessere Erklärung zu liefern.
Wie für: Dies bedeutet, dass der Status, wie er von Ihrer Zielkomponente verwendet wird, eine völlig andere Struktur haben kann als der Status, wie er in Ihrem Geschäft gespeichert ist.
Ich habe die Frage nicht verstanden, weiß aber nur, dass sich der Reaktionsstatus ( this.setState
) völlig vom Redux Store-Status unterscheidet!
Der Reaktionszustand wird verwendet, um das Neuzeichnen und Verhalten der Reaktionskomponente zu handhaben. Der Reaktionszustand ist ausschließlich in der Komponente enthalten.
Der Redux Store-Status ist eine Kombination aus Redux Reducer-Status, die jeweils für die Verwaltung einer App-Logik für kleine Teile verantwortlich sind. Auf diese Reduzierungsattribute kann mit Hilfe react-redux::connect@mapStateToProps
jeder Komponente zugegriffen werden! Dadurch ist der Redux-Speicherstatus für die gesamte App zugänglich, während der Komponentenstatus ausschließlich für sich selbst gilt.