React Redux 为什么大多数指南将每种类型分开?

React Redux Why most guideline separate every types?

我很好奇为什么大多数指南都将每种类型分开?

例如:

 //List of Posts
FETCH_POSTS: 'fetch_posts',
FETCH_POSTS_SUCCESS: 'fetch_posts_success',
FETCH_POSTS_ERROR: 'fetch_posts_failure',

// Single POST
FETCH_POST: 'fetch_post',
FETCH_POST_SUCCESS: 'fetch_post_success',
FETCH_POST_ERROR: 'fetch_post_failure',

我在成功和错误中找到了想法。但是对于 fetch_postsfetch_post 来说只有一个作业可以触发 ex: isLoading 为什么它必须分开?为什么不为 ex 制作一种类型:FETCHING?

谢谢

我认为答案是行动不是你想做的——而是已经发生的事情(根据 Dan Abramov 的说法)。所以没有地方可以“*ing”:FETCH_POST可能被命名为FETCH_POST_REQUEST(用户刚刚请求的帖子),然后成功或失败。

我过去问过同样的问题,在某个地方找到了答案,这只是其中一种实现。它有其优点和缺点,但事实上,标准 FSA 包含一个对象,其元数据可能包含状态(请求/成功/失败,也许还有更多)。

不同动作类型的解决方案的一些优点:

  • 减速器中的一个简单开关;
  • redux-saga 的简单用法(takeEvery('FETCH_POST') 比 takeEvery 更容易并通过一些道具进行过滤);
  • 名称清晰(例如,在 redux-devtools 中查看调度操作列表更容易调试);

但另一种方法也有优势:

  • 您可以轻松处理减速器中的任何异步进程以执行任何操作(例如,如果您只是在寻找 action.meta.status)。但是它的应用范围比较窄,比如所有异步任务的单一进度条。
  • 操作类型较少;

我相信两者都有生命权,但是你应该清楚它会给你的应用带来什么好处,哪个更容易维护。

当然,没有什么可以阻止您混合使用这些方法,但这可能会导致错误和支持困难,所以要小心。