0

I have a large reducer where I'm storing all data entities in a flat structure.

I want to seperate this into 2 seperate reducers so that some of the entities are persisted with Redux Persist and some are not.

To acheive this, I'm trying to add a matcher to detect if the state already has the entity and reject if not.

i.e.

  //these cases are used by both reducers
     builder
    .addCase(update, (state, action) => {})
    .addCase(copy, (state, action) => {})
    .addCase(clone, (state, action) => {})
    .addMatcher(isEntityAction, matcher);

function isEntityAction(action: AnyAction): action is PayloadAction {
  return !!action.payload?.entity;
}

function matcher(state, action: AnyAction): action is PayloadAction<any> {
  return state[action.payload?.entity?.entityType] !== undefined;
}

However the matcher is having no effect.

What's the right way to go about this? Thanks

beek
  • 3,522
  • 8
  • 33
  • 86

1 Answers1

0

You are misinterpreting addMatcher here.

The sigature is addMatcher(matcher, reducer) - the matcher can only say "I want to handle this action" or "I do not want to handle it" - it cannot look at the state. It can also not "reject" something.

phry
  • 35,762
  • 5
  • 67
  • 81