reactjs - How do I access Redux items using selectors after I've normalized my store? -
i'm bit confused on how i'm supposed use selectors after i've normalized redux store.
i have following setup store:
const default_state = { allid: [], locations: {} };
with following reducer:
handleactions({ ['update']: (state, action) => { let newid = state.allid.length; const allid = [...state.allid, newid]; const locations = { ...state.locations, [newid]: action.payload }; return {allid, locations}; } }), ...
i figured want component:
function mapstatetoprops(state) { return { share: callmyselector(state) }; }
but don't see how selector except return location
associated recent id. i'm thinking normalizing not great here - because wouldn't end searching id in regular case.
the power of selectors moves filtering logic away component consuming data, , away actions/reducer reusable functions. mentioned getting recent location. update logic in reducer, we'd make selector grabs last item.
function selectlatestlocation(state) { const latestid = state.allids[state.allids.length - 1]; return state.locations[latestid]; }
this assumes location data structured location id key.
{ 1: { id: 1, name: "usa" }, 2: { id: 2, name: "europe" } }
in case, normalizing data isn't doing much. let's requirements change, , want europe locations. have state property called europeids contains europe location ids.
function selecteuropelocations(state) { return state.europeids.map(id => state.locations[id]); }
using selectors normalized redux state make easy change how data filtered. said, cases might not need normalized. project, , being accomplished. but, it's worth data needs memoized, or filtered in different ways!
Comments
Post a Comment