Ich nehme an "Werte von jedem Reduzierer" beziehen Sie sich auf den gesamten App-Zustand.
Sie können Ihren Zustand aufteilen und nur die benötigten Teile für bestimmte Komponenten freilegen. Das ist, was die connect
-Methode von der react-redux
Bindungen für ist. connect
übernimmt eine Funktion (z. B. mapStateToProps
), die wiederum den gesamten App-Status annimmt und nur die Teile anzeigt, die Sie als Requisiten für die Komponente festlegen, die Sie mit redux verbinden.
Beispiel: Angenommen, Sie haben eine einfache Komponente wie diese reagieren, die den Namen und die Adresse des Benutzers zeigt:
var myComponent = React.createClass({
render: function() {
return (
<div>{Name from redux state goes here}</div>
<div>{Address from redux state goes here}</div>
);
}
});
Offensichtlich brauchen Sie nicht Ihren gesamten App-Status auf diese Komponente zu senden, nur das Stück mit dem Namen und der Adresse des Benutzers. So verwenden Sie connect
wie so:
// the "state" param is your entire app state object.
function mapStateToProps(state) {
return {
name: state.name,
address: state.address
}
}
var connectedComponent = connect(mapStateToProps)(myComponent);
Die umwickelte myComponent
jetzt sieht effektiv wie folgen aus:
var myComponent = React.createClass({
propTypes: {
name: React.PropTypes.string // injected by connect
address: React.PropTypes.string // injected by connect
},
render: function() {
return (
<div>{this.props.name}</div>
<div>{this.props.address}</div>
);
}
});
Ja, ich mache das schon. Ich versuche, so viele Reduzierdateien zu vermeiden. Wenn ich nur 1 Variable für eine Komponente speichern muss, fühlt es sich an wie Overkill, um einen Reduzierer für diese triviale Variable zu erzeugen, die nur an einem einzigen Ort verwendet wird. – tkiethanom
Ja, um mit diesem Problem umzugehen, habe ich einfach nur den lokalen, transienten Zustand in den Komponenten selbst gespeichert und 'setState' verwendet. Den gesamten App-Status, einschließlich trivialer Dinge, wie etwa, ob ein Flyout offen ist oder nicht, in Ihre Reducer/Stores zu bringen, klingt in der Theorie großartig, aber ich fand, dass die Dinge schnell unhandlich wurden. Ich verwende jetzt nur die Stores für den Status, die in der App geteilt werden müssen. –
Ja, ich denke, ich werde auch 'setState' für Komponenten verwenden, die nicht mit dem Rest der App kommunizieren müssen. – tkiethanom