今天的文章不同于之前两篇,它对读者的要求略微有所提高,首先你得对react有清晰的理解,并且你得有一定的redux基础,本文章主要是关于使用redux的项目的优化,减少不必要的redux使用,提高项目性能。
本文章不做redux的详细教学,但爱心满满的作者还是会给读者提供一些学习资源
-
http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html
-
http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_two_async_operations.html
-
http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html
以上三篇文章是阮一峰大牛在多年前写的关于redux的三篇博客,相信大多数redux使用者都有看过,如果你还没有看过,那就要抓紧补上了。
在开始今天的主题前,有几个点我需要强调一下
- react的
state
和redux的state
根本是完全不沾边的两个东西,切记不要混为一谈。react的state
是存在于类组件中的一个存放自身变量的属性,redux的state
整个应用的store
中的某一个namespace
下的状态。二者没有任何关系。 - redux是一个独立于react的,你可以选择使用也可以选择不适用,如果您不是使用的基于redux的脚手架,那么想使用redux您是需要单独引用的。react包中并没有redux。
- 假如您的应用中要使用redux,您是需要将react和redux关联起来的,这里有一个包叫
react-redux
,是用来关联react和redux的,其中有一个高阶函数叫connect,它接受两个方法,mapStateToProps
和mapDispatchToProps
是这两个方法将redux的state
注入到了react的props
中。
上面是带大家回顾redux的一些基本知识点,接下来我们进入主题。
redux的使用场景
- 如果您的React应用中状态十分多,难以维护的时候,这个时候redux是个不错的选择。(这里所说的状态就是react的
state
) - 如果您需要数据共享,即多个react组件需要用同一个数据源。
- 如果您需要一些全局性的状态控制,比如应用中的当前登录人,我们说不定会在哪个组件中使用登录人信息,如果我们将它注册到全局redux中,那么我们就无需关系哪个组件要用了,我们用的时候直接从全局redux中取就行
- 某组件的业务逻辑过于复杂,在react组件中处理这些数据太过繁琐,我们可以考虑将部分逻辑拆分到redux中。
- 使用redux可以将数据和UI分离开,如果您为了实现这样的效果,您可以尝试使用redux.
我们为什么要减少redux的使用
看过阮一峰大哥博客的同学一定看到过这几句话
如果你不知道是否需要 Redux,那就是不需要它。
只有遇到 React 实在解决不了的问题,你才需要 Redux 。
所以redux并不是适合所有项目所有应用的。
-
使用redux需要创建很多模板代码,会让
state
的更新变得十分复杂,这一点谁用谁知道,哈哈。 -
使用过多的redux会让应用失去灵活性
-
Redux 带来了函数式编程、不可变性思想等等,为了配合这些理念,开发者必须要写很多“模式代码(boilerplate)”,繁琐以及重复是开发者不愿意容忍的。当然也有很多 hack 旨在减少 boilerplate,但目前阶段,可以说 Redux 天生就附着繁琐;
使用 Redux,那么你的应用就要用 objects 或者 arrays 描述状态;OMG!
使用 Redux,那么你的应用就要使用 plain objects 即 actions ,来描述变化;OMG!
使用 Redux,那么你的应用就要使用纯函数去处理变化;OMG!
应用中,状态很多都要抽象到 store,那么何时使用 local states 何时接入 Redux store?不能痛痛快快地写业务,一个变化就要对应编写 action(action creator),reducer 等等;
和响应式结合函数式的 Mobx 相比,编程体验“打折扣”
以上是引用了网友的一段话,可见redux的过多使用时存在很多弊端的,我这里就不一一罗列他的弊端了。感兴趣的同学可以去自己搜一下,总是,我认为能不用redux就不用redux
读到这里,我想解决了一些读者心中的疑问“我们什么时候用react的state
什么时候用redux的state
?”答案就很明确了。
redux毕竟是一个比较成功的框架,其中的数据流也是很经典,解决了不少难题,任何东西都有利弊,我们只要做好权衡,相信我们可以写出更加优秀的应用。
文章至此结束,想要了解更多redux的优缺点请参考网上众多好文,本文章只是抛砖引玉。再次谢谢您的浏览。
网友评论