На уровне компонентов, я полагаю, вы можете просто реализовать свой собственный фильтр, а если этот фильтр интенсивно используется, вы можете просто установить его как многоразовый конвейерный оператор
пример rx js filter
myCompFilter=pipe(filter(x=>x.....))
если вам нужен обычный фильтр, это просто обычная функция, возвращающая true или false
filter=(x)=>x>0?
Для защиты действий вы можете просто создать пользовательскую функцию отправки, заключив store.dispatch()
customDispatch=(action)=>if(x) store.dispatch()
, так что объединяя их вместе, вы получите что-то вроде
doSomething.pipe(myCompFilter,tap(()=>customDispatch())
Вы также можете сделать customDispatcher и фильтр более настраиваемыми, возвращая функцию более высокого порядка (вы также можете вызвать ее как частичную функцию)