Redux API
Redux API
Redux的API非常少。Redux定义了一系列的约定(contract),同时提供少量辅助函数来把这些约定整合到一起。
Redux只关心如何管理state。在实际的项目中,还需要使用UI绑定库如react-redux。
顶级暴露的方法:
- createStore(reducer, [preloadedState], [enhancer])
- combineReducers(reducers)
- applyMiddleware(...middlewares)
- bindActionCreators(actionCreators, dispatch)
- compose(...functions)
Store API
ES6引入:
import { createStore } from 'redux';
createStore
createStore(reducer, [preloadedState], enchancer)
创建一个Redux store来存放应用中所有的state。应用中有且只有一个store。
参数:
1、reducer
(Function):接收两个参数,分别是当前的state树和要处理的action,返回新的state树。
2、[preloadedState]
(any):初始state。
3、enhancer
(Function):Store enhancer是一个组合store creator的高阶函数,返回一个新的强化过的store creator。
返回值:
store
:保存了应用所有state的对象。改变state的唯一方法是dispatch action。也可以subscribe 监听state的变化来更新UI。
Store
Store就是用来维持应用所有的state树的一个对象。改变store内state的唯一途径是对它dispatch一个action。
Store不是类,只是有几个方法的对象。创建store只需要把根部的reducing函数传递给createStore
。
Store方法:
返回当前的state树。它与store的最后一个reducer返回值相同。
**返回值 ** (any):应用当前的state树。
分发action,这是触发state改变的唯一途径。会使用当前getState()
的结果和传入的action
以同步方式的调用store的reduce函数。返回值会被作为下一个state。从现在开始,这就成为了getState()
的返回值,同时变化监听器(change listener)会被触发。
参数:
1、action
(Object):描述应用变化的普通对象。
返回值:
(Object):要dispatch的action。
添加一个变化监听器。每当dispatch action的时候就会执行。state树的一部分可能已经改变,可以使用getState()
获取当前的state。
参数:
1、listener
(Function):每当dispatch action的时候都会执行的回调。
返回值:
(Function):一个可以解绑变化监听器的函数。
替换当前用来计算state的reducer。
参数:
1、reducer
(Function):store会使用的下一个reducer。
combineReducers
combineReducers(reducers)
把一个由多个不同reducer函数作为value的object合并成一个最终的reducer函数,然后就可以对这个reducer调用createStore
方法。
合并后的reducer可以调用各个子reducer,并把它们返回的结果合并成为一个state对象。由combineReducers()
返回的state对象,将会传入每个reducer返回的state按其传递给combineReducers()
时对应的key进行命名。
参数:
1、reducers
(Object):一个对象,它的value对应不同的reducer函数,这些函数后面会被合并成一个。
返回值:
(Function):一个调用reducers
对象里所有reducer的reducer,并且构造一个与reducers
对象结构相同的state对象。
applyMiddleware
applyMiddleware(...middleware)
使用包含自定义功能的middleware来扩展Redux是一种推荐的方式。Middleware可以让你包装store的dispatch
方法来达到你想要的目的。
参数:
1、...middleware
(arguement):遵循Redux middleware API的函数。
返回值:
(Function):一个应用了middleware后的store enhancer。这个store enhancer的签名是createStore => createStore
,最简单的使用方法就是直接作为最后一个enhancer
参数传给createStore()
函数。
bindActionCreators
bindActionCreators(actionCreators, dispatch)
把一个value为不同action creator的对象,转成拥有同名key的对象。同时使用dispatch
对每个action creator进行包装,以便可以直接调用它们。
参数:
1、actionCreator
(Function or Object):一个action creator,或者一个value是action creator的对象。
2、dispatch
(Function):一个由Store提供的dispatch
函数。
返回值:
(Function or Object):一个与原对象类似的对象,只不过这个对象的value都是会直接dispatch原action creator返回的结果的函数。如果传入一个单独的函数作为actionCreators
,那么返回的结果也是一个单独的函数。
compose
compose(...functions)
从左到右来组合多个函数。
参数:
1、(arguement):需要合成的多个函数。
返回值:
(Function):从左到右把接收到的函数组合成的最终的函数。
React-Redux API
安装
Redux和React之间没有关系,Redux支持React,需要安装react-redux。
npm install --save react-redux
API
<Provider store>
<Provider store>
使组件层级中的connect()
方法都能获得Redux store。正常情况下,根组件应该嵌套在<Provider store>
中才能使用connect()
方法。
属性:
store
(Redux Store):应用程序中唯一的Redux store对象。children
(ReactElement):组件层级的根组件。
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
连接React组件和Redux Store。连接操作不会改变原来的组件类。反而返回一个新的已与Redux Store连接的组件类。
参数:
[ mapStateToProps(state, [ownProps]): stateProps ]
(Function):如果定义该参数,组件将会监听Redux Store的变化。[ mapDispatchRoProps(dispatch, [ownProps]: dispatchProps) ]
(Object or Function):如果传递的是一个对象,那么每个定义在该对象的函数都会被当做Redux action creator,对象所定义的方法名将作为属性名;每个方法将返回一个新的函数,函数中的dispatch
方法会将action creator的返回值作为参数执行。这些属性会被合并到组件的props中。[ mergeProps(stateProps, dispatchProps, ownProps): props ]
(Function):如果指定了这个参数,mapStateToProps()
与mapDispatchToProps()
的执行结果和组件自身的props
将传入到这个回调函数中。该回调函数返回的对象将作为props传递到被包装的组件中。[ options ]
(Object):如果指定这个参数,可以定制connector的行为。[ pure = ture ]
(boolean):如果为true,connector将执行shouldComponentUpdate
并且浅对比mergeProps
的结果,避免不必要的更新。[ withRef = false ]
(boolean):如果为true,connector会保存一个队被包装组件实例的引用,该引用通过getWrappedInstance()
方法获得。
返回值:
根据配置信息,返回一个注入了state和action creator的React组件。
静态属性:
WrappedComponent
(component):传递到connect()
函数的原始组件类。
静态方法:
getWrappedComponent(): ReactComponent
仅当connect()
函数的第四个参数options
设置了{ withRef: true }
才返回被包装的组件实例。
Redux API的更多相关文章
- Redux API之applyMiddleware
applyMiddleware(...middlewares) 使用包含自定义功能的 middleware 来扩展 Redux 是一种推荐的方式.Middleware 可以让你包装 store 的di ...
- Redux API之Store
Store Store 就是用来维持应用所有的 state 树 的一个对象. 改变 store 内 state 的惟一途径是对它 dispatch 一个action. Store 不是类.它只是有几个 ...
- React深入 - 手写redux api
简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) ...
- Redux API之bindActionCreators
bindActionCreators(actionCreators,dispatch) 把 action creators 转成拥有同名 keys 的对象,但使用 dispatch 把每个 actio ...
- Redux API之compose
compose(...functions) 从右到左来组合多个函数. 这是函数式编程中的方法,为了方便,被放到了 Redux 里. 当需要把多个 store 增强器 依次执行的时候,需要用到它. 参数 ...
- Redux API之combineReducers
combineReducers(reducers) 随着应用变得复杂,需要对 reducer 函数 进行拆分,拆分后的每一块独立负责管理 state 的一部分. combineReducers 辅助函 ...
- Redux API之creatStore
createStore(reducer, [initialState]) 创建一个 Redux store 来以存放应用中所有的 state.应用中应有且仅有一个 store. 参数 reducer ...
- Redux基础
Redux 是一个状态容器 Redux 就像是作者自己的介绍,它不会为你提供任何的东西,它不会告诉你如何做路由,它只专注于应用程序状态,是一个 JavasSript 的状态容器,所有的状态的变化都是当 ...
- React+Redux学习笔记:React+Redux简易开发步骤
前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...
随机推荐
- 【原创】WinForm中实现单独Time控件的方式
WinForm默认只提供了DateTimePicker,今天的项目只用时间,不能出现日期,百撕不得骑姐(^^),也没花多少时间,随便试了一下,就成功了,分享一下. 在DateTimePicker属性中 ...
- CAD图纸怎么看?这两种方法值得看
在CAD日常的工作中,每天都是需要接触到CAD图纸文件,有一些房屋设计.建筑施工图.室内家具设计图纸等,这些CAD图纸的格式均为dwg格式的.是不能够直接进行打开查看的,需要借助CAD看图软件来使用. ...
- Class文件结构-练习题1
package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...
- vue如何循环渲染element-ui中table内容
对于大多数前端开发者来说,vuejs+element-ui是开发后台管理系统过程中必不可少的技术框架.而后台管理系统中,最常见的形式就是表格和表单,以便用来增删改查. element-ui中table ...
- Vue-Cli 3.0 中配置高德地图
vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存 ...
- 配置 yum 源的两种方法
配置 yum 源的两种方法 由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程: 1.删除red ...
- Cocos2d-x项目编译为Android应用——命令行方式
配置: 相关工具:Cocos2d-x 3.2 + Ant 1.9.4 + Android NDK r9d + Android SDK 运行平台:OS X 10.9.4+ Xcode 6 前言:笔者使用 ...
- python-paramiko对远程服务器终端的操作
1.with open写文件到本地 2.paramiko SFTPClient将文件推到salt服务端 3.paramiko SSHClient通过salt-cp将文件分发给目标服务器 1. with ...
- ubuntu下面安装nodejs
对于刚接触ubuntu的同学来说,一切都是新的,一切都是那么熟悉而又不熟悉的.不管是作为一个前端工程师还是一个后端工程师,我相信大家知道nodejs,但是如果希望自己能够在ubuntu上面使用node ...
- js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?
壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...