我应该在哪里调用具有副作用的函数,如Date.now或random



例如,我需要一个当前日期或在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}
}
)
);

这感觉太夸张了。最佳实践是什么?

我认为注释中已经提供了答案,但为了完整性,让我在这里提供一个"真实"的答案。

就像@cartant说的,你可以把这些副作用放在动作创作者身上。这些动作创作者不一定是纯粹的,这意味着你可以这样做:

const addTodo = ({
id = uuid(),
description = '',
createDate = Date.now
} = {}) => ({
type: 'ADD TODO',
payload: { id, description, createDate }
})

这样做还有一个额外的好处,那就是更容易进行测试:

  • 在动作测试中,您测试idcreateDate是否存在,但不测试值
  • 要测试减速器,可以设置这些值addChat({id: 4654, description: 'a random todo', createDate: 111})

这就是为什么我更喜欢在动作创建者中这样做的原因,如果你喜欢,你可以在效果中这样做,但不要在reducer函数中这样做。

减速器功能必须保持纯

欲了解更多信息,请参阅让我们聊一聊NgRx 中的动作和动作创建者

相关内容

  • 没有找到相关文章

最新更新