Wie würden Sie die Redux-Statusform und/oder Reduktionszusammensetzung für paginierte und relationale Daten wie paginierte Posts aus einer bestimmten Kategorie aus einer Wordpress-API (zB: .../posts? Kategorien = 11)?Redux-Status mit paginierten relationalen Daten
zu tun habe ich es zur Zeit auf diese Weise:
const reducer = (state = {}, action) => {
switch (action.type) {
case 'RECEIVE_POSTS': {
const { data } = action.payload.result // posts ids
return { ...state, [action.meta.page || '1']: data }
}
default: return state
}
}
const list = (listName, predicate, getSublistName) => (state, action) => {
if (action.error || listName != predicate(action)) {
return state
} else if (getSublistName) {
const sublistName = getSublistName(action)
return { ...state, [sublistName]: reducer(state[sublistName], action) }
}
return reducer(state, action)
}
export default combineReducers({
categories: list(
'categories',
(action) => action.meta && action.meta.list,
(action) => action.meta && head(action.meta.categories)) // head comes from Lodash
),
search: list(
'search',
(action) => action.meta && action.meta.list
),
...
}
Es funktioniert, aber ich fühle, dass entweder das list
höhere Ordnung Minderer, indem sie agnostisch in Bezug auf eine tiefere Verschachtelung (was falsch anfühlt verbessert werden könnte. ..) oder die resultierende Zustandsform ist zu sehr verschachtelt.
Ich kann nicht meinen Kopf wickeln, um einen völlig flachen Zustand zu bekommen, außer durch Einträge wie ein postsCategories
Array von Posts Objekten mit einer Post/Kategorie ID und Seitenzahl, aber dann würden Daten viel dupliziert werden (was sich anfühlt auch falsch ...).
Es gibt some libraries for pagination, aber ich glaube nicht, dass einer von ihnen damit umgehen.
Geht es um Reduktionsmittelzusammensetzung oder Zustandsform? Beide?
Danke Mark. Mein Beispiel verwendet bereits normalisierte Daten, aber ich hätte es deutlicher machen sollen, dass "action.payload.result.data" ein Array von IDs ist und dass Post-Daten an anderer Stelle gespeichert werden. Ich habe schon Kasia und Calypso angeschaut ... Ich werde mir etwas Zeit nehmen, um ihren Code besser zu verstehen. Ich habe schnell den Artikel "Advanced Redux Entity Normalization" durchsucht und mich daran erinnert, dass ich über die Verwendung von abitarischen Namen für Staatsformen wie 'categoryFoo-page1' nachgedacht habe ... Ist es die empfohlene Best Practice? Ich weiß, ich sollte auch auf Redux ORM schauen. – cdoublev