Ich verstehe nicht wirklich, wie die Neuauswahl das Rendern von Komponenten reduziert. Dies ist, was ich ohne erneutes Auswählen:Wie wirkt sich die erneute Auswahl auf das Rendern von Komponenten aus?
const getListOfSomething = (state) => (
state.first.list[state.second.activeRecord]
);
const mapStateToProps = (state, ownProps) => {
console.log(state.first.list, state.second.activeRecord);
return {
...ownProps,
listOfSomething: getListOfSomething(state)
}
};
Es verbindet ein Element aus einer Liste basierend auf einem bestimmten Wert. Render wird jedes Mal etwas in den Zustandsänderungen genannt, so zum Beispiel meiner console.log
Ausgänge:
{}, ""
{}, ""
{}, ""
{}, "1"
{"filled", "1"}
weil etwas geht in dem anderen Teil des Speichers auf. Somit wird die Komponente 5 mal, 2 redundant gerendert.
Verwendung jedoch erneut auswählen:
const getList = state => state.first.list;
const getActiveRecord = state => state.second.activeRecord;
const listOfSomething = (list, activeRecord) => {
console.log(list, activeRecord);
return list[activeRecord];
}
const getListOfSomething = createSelector(getList, getActiveRecord, listOfSomething);
const mapStateToProps = (state, ownProps) => {
console.log(state.first.list, state.second.activeRecord);
return {
...ownProps,
listOfSomething: getListOfSomething(state)
}
};
Hier ist meine erste Auswahl console.log
Ausgänge:
{}, ""
{}, "1"
{"filled", "1"}
Die zweite:
{}, ""
{}, ""
{}, ""
{}, "1"
{"filled", "1"}
Und die Komponente richtig gemacht - 3 mal!
Warum ist das so? Warum wird die Komponente nur 3 Mal gerendert? Was ist hier genau los?