第12章:react-redux

介绍

容器组件与 UI 组件

UI 组件

  • 只负责 UI 的呈现, 不带有任何业务逻辑
  • 没有状态(即不使用 this.state 这个变量)
  • 所有数据都由参数( this.props )提供
  • 不使用任何 ReduxAPI

容器组件

  • 负责管理数据和业务逻辑, 不负责 UI 的呈现
  • 带有内部状态
  • 使用 ReduxAPI

Provider 与 connect

React-Redux 提供 Provider 组件, 可以让容器组件拿到 state

import React from 'react'
import ReactDOM from 'react-dom'
import {Provider} from 'react-redux'
import store from './store'
import App from './App'const rootElement = document.getElementById('root')
ReactDOM.render(<Provider store={store}><App/></Provider>,rootElement
)

React-Redux 提供 connect 方法, 用于从 UI 组件生成容器组件

import {connect} from 'react-redux'
import {increment, decrement, reset} from './actionCreators' // const Counter = ...
const mapStateToProps = (state /*, ownProps*/) => {return {counter: state.counter}
}
const mapDispatchToProps = {increment, decrement, reset}
export default connect(mapStateToProps,mapDispatchToProps
)(Counter)

HOC 与 context 通信在 react-redux 底层中的应用

  • connectHOC, 高阶组件
  • Provider 组件, 可以让容器组件拿到 state, 使用了 context

高阶组件构建与应用

HOC 不仅仅是一个方法, 确切说应该是一个组件工厂, 获取低阶组件, 生成高阶组件。

  • 代码复用, 代码模块化
  • 增删改 props
  • 渲染劫持
// Child.js
// 高阶函数
function Control(wrappedComponent) {return class MyControl extends React.Component {render() {if (!this.props.data) {return <div>loading...</div>}return <wrappedComponent {...props} />}}
}class MyComponent extends React.Component {render() {return <div>{this.props.data}</div>}
}// 高阶组件
export default Control(MyComponent);
// Parent.js
import MyControlComponent from "./Child"<MyControlComponent data={this.state.value}/>
// 在父级传入 data 是 null 的时候, 这一块儿就只会显示 loading...
// 不会显示组件的具体内容, 如果 data 不为 null, 就显示真实组件信息

Redux 持久化

import {persistStore, persistReducer} from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';const persistConfig = {key: 'kerwin', storage: storage,// localStorage: import storage from 'redux-persist/lib/storage'// sessionStorage: import storageSession from 'redux-persist/lib/storage/session'stateReconciler: autoMergeLevel2// 控制在本地存储中, 新老状态怎么合并, 覆盖?或者合并?
};
// 改造 reducer
const myPersistReducer = persistReducer(persistConfig, reducer)
// 改造 store
export const persistor = persistStore(store)
// 改造根组件
import {persistor} from './Store'
import {PersistGate} from 'redux-persist/lib/integration/react';
<PersistGate loading={null} persistor={persistor}> ... </PersistGate>

第12章:react-redux相关推荐

  1. React Redux: 从文档看源码 - Components篇

    注:这篇文章只是讲解React Redux这一层,并不包含Redux部分.Redux有计划去学习,等以后学习了Redux源码以后再做分析 注:代码基于现在(2016.12.29)React Redux ...

  2. React+Redux仿Web追书神器

    引言 由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了 ...

  3. React + Redux

    相当长一段时间以来,我一直在React和Redux中实现应用程序.在过去的几年里,我写了两本关于它的电子书,并发布了学习React及其生态系统的课程平台.课程平台甚至内置在React和Redux中.我 ...

  4. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  5. 一个 react+redux 工程实例

    在前几天的一篇文章中总结部分提到了学习过程中基础的重要性.当然,并不是不支持大家学习新的框架,这篇文章就分享一下react+redux工程实例. 一直在学习研究react.js,前前后后做了几次分享. ...

  6. [OHIF-Viewers]医疗数字阅片-医学影像-React/Redux 的好帮手Classnames

    我曾经看到一篇文章说,其实现在的单页面应用已经有向feature-flag编程发展的倾向了.什么意思呢? 和鸿门宴一样,项羽设局为了杀刘邦,在大厅后面埋伏了刀斧手,这些刀斧手是否行动要等主人的指令,指 ...

  7. React + Redux + Express + Mongodb 零基础开发完整大型商城网站视频教程(97 个视频)

    React + Redux + Express + Mongodb 零基础开发完整大型商城网站视频教程(97 个视频) mern 架构零基础开发完整电商网站 React + Redux + Expre ...

  8. 使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用

    先看效果图 github地址 github仓库 在线访问 初始化项目 #创建项目 create-react-app applist #如果没有安装create-react-app的话,先安装 npm ...

  9. React Redux 与胖虎

    这是一篇详尽的 React Redux 扫盲文. 对 React Redux 已经比较熟悉的同学可以直接看 <React Redux 与胖虎他妈>. 是什么 React Redux 是 R ...

最新文章

  1. PROC系列之/proc/stat/
  2. 实现 VC 最小化到 托盘
  3. VC 对话框背景颜色 控件颜色
  4. 牛掰本机限速软件appband
  5. SQL Server 2017 AlwaysOn AG 自动初始化(九)
  6. 基于边缘AI计算的人员入侵检测CNN算法在实际场景中的应用
  7. C#使用MX Component与三菱PLC建立通讯(以FX5U举例)
  8. NanoMsg框架|NanoMsg的简介
  9. STM32——PWM知识详解
  10. 14.linux中的无人职守安装脚本kickstart
  11. scikit-learn:回归分析——多元线性回归LinearRegression
  12. 【GA MTSP】基于matlab GUI遗传算法求解多旅行商问题(多起点不同终点)【含Matlab源码 935期】
  13. 在Linux中安装mysql后遇到错误20008解决方案
  14. vue3循环遍历图片渲染无效果
  15. redhat7安装oracle11gR2之环境准备
  16. 注册功能课件详解:前后端
  17. HTML学习6~29(HTML语法规范)
  18. 国家授时中心 网络服务器时间,中国国家授时中心的时间服务器IP地址及时间同步方法...
  19. 关于opencv的实战——银行卡号识别
  20. res\values-sw360dp\dimens.xml.orig:518: error:

热门文章

  1. Java图形类的实现
  2. DB 谈 35 岁现象
  3. Linux C/C++或者嵌入式开发到底有没有35岁危机?
  4. python中查找特定字符的方法
  5. 你学废了嘛?PyCharm 必知必会的 40个使用技巧
  6. 一面大批裁员,一面又控股科陆电子 美的何享健要做什么
  7. Android 重力感应
  8. UDP可靠性传输KCP实现原理和应用
  9. 《红楼梦》中人物词频统计
  10. 超全 泛微 E9 Ecology 9开发资料大全 开源资源下载 泛微E9二次开发 泛微开发实战经验 泛微开发实战例子 泛微二次开发项目例子 泛微二次开发Demo 泛微二次开发完整例子 泛微二次开发入门