Redux API

​ Redux的API非常少。Redux定义了一系列的约定(contract),同时提供少量辅助函数来把这些约定整合到一起。

​ Redux只关心如何管理state。在实际的项目中,还需要使用UI绑定库如react-redux

顶级暴露的方法:

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方法


getState()

​ 返回当前的state树。它与store的最后一个reducer返回值相同。

​ **返回值 ** (any):应用当前的state树。


dispatch(action)

​ 分发action,这是触发state改变的唯一途径。会使用当前getState()的结果和传入的action以同步方式的调用store的reduce函数。返回值会被作为下一个state。从现在开始,这就成为了getState()的返回值,同时变化监听器(change listener)会被触发。

参数

​ 1、action(Object):描述应用变化的普通对象。

返回值

​ (Object):要dispatch的action。


subscribe(listener)

​ 添加一个变化监听器。每当dispatch action的时候就会执行。state树的一部分可能已经改变,可以使用getState()获取当前的state。

参数

​ 1、listener(Function):每当dispatch action的时候都会执行的回调。

返回值

​ (Function):一个可以解绑变化监听器的函数。


replaceReducer(nextReducer)

​ 替换当前用来计算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的更多相关文章

  1. Redux API之applyMiddleware

    applyMiddleware(...middlewares) 使用包含自定义功能的 middleware 来扩展 Redux 是一种推荐的方式.Middleware 可以让你包装 store 的di ...

  2. Redux API之Store

    Store Store 就是用来维持应用所有的 state 树 的一个对象. 改变 store 内 state 的惟一途径是对它 dispatch 一个action. Store 不是类.它只是有几个 ...

  3. React深入 - 手写redux api

    简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) ...

  4. Redux API之bindActionCreators

    bindActionCreators(actionCreators,dispatch) 把 action creators 转成拥有同名 keys 的对象,但使用 dispatch 把每个 actio ...

  5. Redux API之compose

    compose(...functions) 从右到左来组合多个函数. 这是函数式编程中的方法,为了方便,被放到了 Redux 里. 当需要把多个 store 增强器 依次执行的时候,需要用到它. 参数 ...

  6. Redux API之combineReducers

    combineReducers(reducers) 随着应用变得复杂,需要对 reducer 函数 进行拆分,拆分后的每一块独立负责管理 state 的一部分. combineReducers 辅助函 ...

  7. Redux API之creatStore

    createStore(reducer, [initialState]) 创建一个 Redux store 来以存放应用中所有的 state.应用中应有且仅有一个 store. 参数 reducer  ...

  8. Redux基础

    Redux 是一个状态容器 Redux 就像是作者自己的介绍,它不会为你提供任何的东西,它不会告诉你如何做路由,它只专注于应用程序状态,是一个 JavasSript 的状态容器,所有的状态的变化都是当 ...

  9. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

随机推荐

  1. CSS 利用 `padding-bottom` 实现固定比例的容器

    复用 padding-bottom 可实现一块区域在窗口尺寸变化使始终保持自适应.对于响应式布局中的图片或视频来说比较有用. <div style="width: 100%; posi ...

  2. html中的框架frameset和frame及iframe

    通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面. 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面,简而言之,就是在一个窗口中显示多个页面. 每个页面称之为一个框架.并且每个框架独立 ...

  3. Eclipse如何重置窗口

    https://jingyan.baidu.com/article/915fc41459585f51394b20c3.html 在Eclipse进行开发的时候,我们经常会由于这个窗口或者那个窗口没有打 ...

  4. 20190608_浅谈go&java差异(三)

    20190608_浅谈go&java差异(三) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/10990703.html 第三节内容概览 多线程通讯(线程 ...

  5. 使用“npm init”初始化项目

    使用npm init初始化项目 为什么要使用npm init初始化项目 在node开发中使用npm init会生成一个pakeage.json文件,这个文件主要是用来记录这个项目的详细信息的,它会将我 ...

  6. redis cluster集群动态伸缩--删除主从节点

    目标:从集群中剔除一组主从(5007,5008) 经过上一节增加5007,5008主从服务节点后,目前集群的情况是这样的: b3363a81c3c59d57143cd3323481259c044e66 ...

  7. spring boot 加入mail邮件支持

    一.添加依赖 <!-- 邮件整合 --> <dependency> <groupId>org.springframework.boot</groupId> ...

  8. Configuration on demand is not supported by the current version of the Android Gradle plugin since you are using Gradle version 4.6 or above. Suggestion: disable configuration on demand by setting org

    androidStudio打开cocos3.17.2Lua项目时,出现了 Configuration on demand is not supported by the current version ...

  9. Python学习笔记六(免费获取代理IP)

    为获取网上免费代理IP,闲的无聊,整合了一下,免费从三个代理网站获取免费代理IP,目的是在某一代理网站被限制时,仍可从可以访问的其他网站上获取代理IP.亲测可用哦!^_^  仅供大家参考,以下脚本可添 ...

  10. MongoDB学习笔记(六、MongoDB复制集与分片)

    目录: MongoDB部署模型 MongoDB可复制集 MongoDB读写分离 分片架构部署 最佳实践 MongoDB部署模型: 单机 -> 可复制集 -> 分片集群 MongoDB可复制 ...