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. 【原创】WinForm中实现单独Time控件的方式

    WinForm默认只提供了DateTimePicker,今天的项目只用时间,不能出现日期,百撕不得骑姐(^^),也没花多少时间,随便试了一下,就成功了,分享一下. 在DateTimePicker属性中 ...

  2. CAD图纸怎么看?这两种方法值得看

    在CAD日常的工作中,每天都是需要接触到CAD图纸文件,有一些房屋设计.建筑施工图.室内家具设计图纸等,这些CAD图纸的格式均为dwg格式的.是不能够直接进行打开查看的,需要借助CAD看图软件来使用. ...

  3. Class文件结构-练习题1

    package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...

  4. vue如何循环渲染element-ui中table内容

    对于大多数前端开发者来说,vuejs+element-ui是开发后台管理系统过程中必不可少的技术框架.而后台管理系统中,最常见的形式就是表格和表单,以便用来增删改查. element-ui中table ...

  5. Vue-Cli 3.0 中配置高德地图

    vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存 ...

  6. 配置 yum 源的两种方法

    配置 yum 源的两种方法 由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程:  1.删除red ...

  7. Cocos2d-x项目编译为Android应用——命令行方式

    配置: 相关工具:Cocos2d-x 3.2 + Ant 1.9.4 + Android NDK r9d + Android SDK 运行平台:OS X 10.9.4+ Xcode 6 前言:笔者使用 ...

  8. python-paramiko对远程服务器终端的操作

    1.with open写文件到本地 2.paramiko SFTPClient将文件推到salt服务端 3.paramiko SSHClient通过salt-cp将文件分发给目标服务器 1. with ...

  9. ubuntu下面安装nodejs

    对于刚接触ubuntu的同学来说,一切都是新的,一切都是那么熟悉而又不熟悉的.不管是作为一个前端工程师还是一个后端工程师,我相信大家知道nodejs,但是如果希望自己能够在ubuntu上面使用node ...

  10. js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?

     壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...