使用了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
redux我建议所有数据都存放进去
从实现功能角度,你可以用state,但我建议你先把数据都尝试放在redux中,慢慢体会这样做的意义,可维护性会得到极大提升。
你写的有问题,派发action ,saga和reducer都会感知到action。如果你要做业务逻辑,只在saga中处理就行了,不用管reducer。
00
相似问题