使用了redux之后,是否所有的数据都要放在store中?

来源:6-12 使用React-redux完成TodoList功能

两只流浪猫

2019-04-18

首先感谢老师,讲的很细致,对于初学者帮助太大了。不过我没有经验,在实际做项目的时候还是有些疑问。

比如使用了redux之后,是否所有的数据都要放在store中?

如果不使用redux,那么每个组件内部的数据会放在 this.state中
如果使用了redux,每次更新数据就需要调用action 来更新数据

在有一些应用场景中,比如组件中有一个video播放器,我需要一个变量来控制播放器的播放暂停,这个数据和其他的组件无关。
或者我需要一个变量记录视频当前的播放位置,这个播放位置可能在退出页面的时候,我将其存放到本地。下次再进入的时候读取播放位置。

第一个问题:类似这样的,只在当前组件使用的数据,是否有必要写一个action?

如果一些无需和其他组件共用的数据可以写在当前组件的 this.state中,使用this.setState来更新

那么,第二个问题:是否这些数据我可以在 componentWillMount 的时候挂载上去,在组件销毁的时候将this.state赋值未空?这样的操作是否对性能优化有一定帮助?

第三个问题是关于saga的

项目使用了saga之后,每次调用action,我发现会同时触发saga和reducers。
比如我写了一个获取文章列表的action
我想当然中是这样的
调用 action => saga 获取文章列表 => 请求成功 => put一个保存文章列表的action => reducers 触发action.type 返回一个新的state => store

但是实际上在我触发action后,在执行saga的时候,同时还触发了一次reducers
我的action是获取文章列表,我要先获取到数据,才能更改数据,
那我获取文章列表的时候其实是没有数据操作的,action.type 也没有写匹配项,最后将state原样返回 如下:

export default (state = initialState, action) => {
  switch (action.type) {
	.....
    default:
      return state
  }
}

我想问以上问题,是因为我写法有误,还是使用saga就是这样?

这种情况对性能的损耗大吗?

写回答

1回答

Dell

2019-04-19

  1. redux我建议所有数据都存放进去

  2. 从实现功能角度,你可以用state,但我建议你先把数据都尝试放在redux中,慢慢体会这样做的意义,可维护性会得到极大提升。

  3. 你写的有问题,派发action ,saga和reducer都会感知到action。如果你要做业务逻辑,只在saga中处理就行了,不用管reducer。

0
0

React零基础入门到实战,完成企业级项目简书网站开发

主流新技术 React-redux,React-router4,贯穿基础语法

5275 学习 · 2496 问题

查看课程