如题所示:
如果有一大段代码,这段代码纯用来操作js计算(假设复杂度极高),并在计算结束后反馈到页面上。那么这段代码写在哪里比较好。
第一种写在页面里,页面里面可以拿到store下的绝大多数数据,但是页面一般只用来展示;
第二宗写在reduce文件,只能拿到改reduce的state,但是文件很整洁;
如题所示:
如果有一大段代码,这段代码纯用来操作js计算(假设复杂度极高),并在计算结束后反馈到页面上。那么这段代码写在哪里比较好。
第一种写在页面里,页面里面可以拿到store下的绝大多数数据,但是页面一般只用来展示;
第二宗写在reduce文件,只能拿到改reduce的state,但是文件很整洁;
1 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答1.3k 阅读
1 回答1.7k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
2 回答2.3k 阅读
这个问题有点涉及架构了,现在社区也没有明确的结论,我说一点自己的看法。
遇到这种情况我会遵循两个原则:
1.如果对容器组件和展示组件做了明确区分,或者没做区分但是当前组件的业务逻辑很简单,那么我会保证展示组件的纯洁性,把逻辑放到
container/reducer
里面;2.如果这段代码需要复用,且涉及到的组件没有共同的父组件,那么我会把逻辑放到
reducer
中,通过action
提供必要的参数,在reducer
中计算。除此以外我会尽量把逻辑放到组件中。也就是说,对你的描述而言,我会放到
container
里面。如果逻辑很长影响代码可读性,可以考虑抽成一个单独的文件,暴露调用接口和取值接口。这个做法不是很规范,有野路子的嫌疑,我也很少用。
另外还有一点,如果为了计算需要从
store
引入大量参数,那么我也会考虑放到reducer中。因为这样会让你的组件更新得更频繁,或者shouldComponentUpdate
写得更复杂社区早期是推崇逻辑放到
action
里的,现在也有reducer
派的声音了。如果你需要单元测试,reducer
的做法会带来很大便利,测试纯函数的感觉,谁用谁知道。抛砖引玉,希望能有高手说两句