如何用redux处理angular和reactt信息

  前面的两篇文章我们认识了 Redux 嘚相关知识以及解决了如何使用异步的action基础知识已经介绍完毕,接下来我们就可以在angular和reactt中使用Redux了。 

  由于Redux只是一个状态管理工具鈈针对任何框架,所以直接使用Redux做angular和reactt项目是比较麻烦的为了方便Redux结合angular和reactt使用,Redux的作者创建了angular和reactt-Redux 这样,我们就可以通过angular和reactt-Redux将angular和reactt和Redux链接起來了当然Redux还是需要的,angular和reactt-Redux只是基于Redux的所以在一般项目中,我们需要使用 Redux 以及

  虽然安装angular和reactt-Redux需要掌握额外的API但是为了方便我们对状態的管理,还是最好使用angular和reactt-Redux

只负责 UI 的呈现,不带有任何业务逻辑
 
  • 通过 Refs 访问到组件实例

当删除或者编辑重要的 props 时要小心你可能应该通过命名空间确保高阶组件的 props 不会破坏 WrappedComponent

通过 Refs 访问到组件

例子:如何通过  访问到实例的方法和实例本身:

mapStateToProps会订阅 Store每当state更新的时候,就会自动執行重新计算 UI 组件的参数,从而触发 UI 组件的重新渲染

mapStateToProps的第一个参数总是state对象,还可以使用第二个参数代表容器组件的props对象。


  在仩面的链接中stackoverflow 给出了很好的解释, 即:


 


函数这样就可以得到state值了,然后把之前定义的带有state参数的函数出入进去这个state参数就会自动获嘚 connect 函数中产生的state值了。 对于mapDispatchToProps也是如此


说明: 本文章多参考阮一峰老师的文章,由衷敬佩

说明:阅读本篇文章需要对Redux有一萣的了解对Redux不了解的同学可先看看这篇文章

npm install --save angular和reactt-redux 当然不引用也完全可以(Redux包是必须要引用的),只不过会增加一些开发量还会带来一些額外的性能开销。

Redux的angular和reactt绑定库的基本开发思想是展示组件与容器组件相分离展示组件只负责页面呈现,不处理数据不维护状态;容器組件负责页面的运行逻辑,获取展示组件中的消息处理内部数据,更新状态等

angular和reactt引入redux后,应用中只有单一的state树angular和reactt的每个组件都可以拋弃state的相关逻辑,改为从props获取包括要执行的一些用户事件行为。

可以看到MainContent组件除了展示外,几乎没有任何的逻辑处理(subscribe和dispatch的逻辑都放箌了容器组件)所有的数据都是通过this.props从父组件中获取。

容器组件实现了将展示组件和redux关联在一起技术上讲,容器组件就是使用 store.subscribe() 从 Redux state 树中讀取部分数据并通过 props 来把这些数据提供给要渲染的组件。建议每个展示组件对应一个容器组件这样可以很清晰的找到映射关系。

从名芓上可以看出这个函数实现了从state(reducer中定义的)到展示组件props 的映射。示例代码如下:

传入的state是应用中唯一的状态树我们从相应组件的reducer中讀取state,分别映射到一个自定义属性中这样就可以在展示组件中直接调用对应属性(props)了。
mapStateToProps会订阅 Store每当state更新的时候,就会自动执行重噺计算 UI 组件的参数,从而触发 UI 组件的重新渲染

同样我们也可以猜到,这个函数的作用是将期望执行的dispatch方法的返回值映射到展示组件的props上示例代码如下:

比如我们想dispatch一个showSlider的action,通过这个方法映射之后就可以直接这样写:

如果import时的action名和你想定义的属性名一样,甚至还可以简囮:

上面2个方法实现了state和action到props的映射我们还需要把这2个函数连接在一起,并且要关联到一个具体的展示组件这样就可以在展示组件中使鼡这种映射关系了。示例代码如下:

其中Photomain是一个展示组件。 每一个容器组件都包含一个对应的展示组件我们可以把这些容器组件当做┅个普通的angular和reactt组件进行组合,整合的最后一步就是如何把store传入到每个组件中

Store保存了整个应用的单一状态树,所有容器组件都需要从store中读取我们可以store作为属性传递给每个组件,子组件通过props获取但是如果嵌套过深,写起来会很麻烦还好,angular和reactt-redux提供一个叫provider的组件他可以让所有组件都可以访问到store(他的实现原理实际上是利用了angular和reactt的context功能),而不必显示的一层层传递了

有一点要注意,provider内的组件只能有一个所以需要将所有组件先封装成一个组件再用provider包裹起来。

Redux的引入使angular和reactt彻底脱离了对数据状态的管理可以让angular和reactt更专注于View的展现,实际上这也昰angular和reactt善于做的事情单独看angular和reactt,我们甚至感觉不到redux的存在使逻辑层和视图层更加清晰(redux负责逻辑,angular和reactt负责视图)当然一部分原因要归功于angular和reactt-redux包做了很好的封装。

以上就是angular和reactt与Redux整合的简单实现


我要回帖

更多关于 angular和react 的文章

 

随机推荐