例如,我需要当前日期或在reducer中随机排列列表。我应该为此使用效果吗?
@Effect()
foo$: Observable<Action> = this.actions$.pipe(
ofType('Foo'),
map(action => {
//create result with Date.now or shuffle
return {type: 'Foo_Result', payload: result}
}
)
);
感觉像是过分杀伤力。最佳做法是什么?
答案 0 :(得分:2)
我认为评论中已经提供了答案,但出于完整性考虑,让我在此处提供“真实”答案。
就像@cartant一样,您可以将这些副作用放入动作创建者中。这些动作创建者不必一定是纯粹的,这意味着您可以这样做:
const addTodo = ({
id = uuid(),
description = '',
createDate = Date.now
} = {}) => ({
type: 'ADD TODO',
payload: { id, description, createDate }
})
这样做有一个额外的好处,那就是更容易的测试:
id
和createDate
是否存在,但不测试值addChat({id: 4654, description: 'a random todo', createDate: 111})
。这就是为什么我更喜欢在动作创建者内部执行此操作的原因,如果愿意,可以在效果内部执行此操作,但不要在reducer函数内部执行。
reduce函数必须保持纯净。
有关更多信息,请参考Let’s have a chat about Actions and Action Creators within NgRx