I @ Vanojx1 Code aktualisiert werden 2 Lösungen vorzuschlagen:
(Disclaimer: Ich bin der Autor wieder neu wählen, aber dies ist ein typischer Anwendungsfall)
Code-Basis
let state = {
items: [
{ id: 1, parent: null, children: [2, 3] },
{ id: 2, parent: 1, children: [4] },
{ id: 3, parent: 1, children: [], value: 10 },
{ id: 4, parent: 2, children: [], value: 20 }
]
};
function getSum(items, id) {
let item = items.find(item => item.id == id);
return item.hasOwnProperty('value') ? item.value : item.children.reduce((current, next) => {
return current + getSum(items, next);
}, 0);
}
Lösung 1 - nur
import { createSelector } from 'reselect';
const getSumSelector = createSelector(
(state) => state.items,
(state, id) => id,
(items, id) => getSum(items, id)
);
getSumSelector(state, 1);
// Loses memoization with sequentials calls with same items but different id's
erneut auswählen
Lösung - erneut auswählen + Wieder erneut auswählen
import createCachedSelector from 're-reselect';
const getSumSelector = createCachedSelector(
state => state.items,
(state, id) => id,
(items, id) => getSum(items, id)
)(
// Cache selector by id
(state, id) => id
);
getSumSelector(state, 1);
was meinst du mit „einer Neuauswahl Selektor erstellen“? – Vanojx1
Ich meine, das Ergebnis des "Getter" aus dem Staat mit: https://github.com/reactjs/reselect –