【发布时间】:2020-08-19 05:09:41
【问题描述】:
我有几个使用相同reducer 的动作,而不是在每个动作中都有一个dom 操作,我只想在我的共享reducer 中添加一次。我知道 reducer 是纯粹的(返回的数据仍然是),但这是某种反模式还是可接受的策略?
case APPEND_POSTS:
!payload.length &&
document.getElementById('posts-cont').classList.add('no-more-posts'); // this
const total = state.posts.length + payload.length;
const limit = total > posts_to_keep_limit ? 50 : 0;
return {
...state,
posts: [...state.posts.slice(limit), ...payload],
loading: false,
};
```
【问题讨论】:
-
看起来很糟糕......你应该用 state 改变类
-
DOM 操作(98% 的情况)即使在组件中也应该避免,更不用说在 reducer 中了。如果某些效果必须与动作一起运行,请将它们放在动作创建器中或作为中间件。
标签: javascript reactjs redux anti-patterns redux-reducers