理解

react-redux是辅助redux的,我们正常使用redux是很麻烦的,需要在每个组件中去监听数据变化,执行数据更新等,但是通过react-redux,我们可以简化组件使用公共数据的操作

react-redux通过Provider+connect方式完成跨组件传值

底层原理

我们知道跨组件传值有一个方法是context,context通过是Provider+Consumer使用

react-redux和context传值类似:提供的Provider生产者,Consumer结合高阶组件+柯里化函数封装成connect

使用

用Provider包裹根组件,store是自定义属性,属性值是要传递的数据,只要子组件中引入connect,就可以调用store中的值

//根目录index.js
import React from 'react';
import ReactDOM from 'react-dom';
import {HashRouter as Router} from "react-router-dom"
import App from './App';
import {Provider} from 'react-redux';
import store from './store';
import 'lib-flexible';
import './assets/styled/reset.css'; ReactDOM.render(
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>
,
document.getElementById('root')
);

子组件中引入connect,获取store中的值

react-redux简单代码实现

import React,{Fragment}from "react"
import {Consumer} from "../../createContext"
//其实就是react-redux的底层实现,这种函数形式是典型的柯里化函数即返回结果是函数,调用方式:fn()().
export default (Wrapper)=>(mapStateToProps)=>{
return class extends React.Component{
render(){
  return (
        <Consumer>
          {
            (value)=>{
              let props = mapStateToProps(value);
              return <Wrapper {...props}/>
            }
          }
        </Consumer>
        )
}}}

使用实现的简单代码

import React, { Component } from 'react';
import connet from "../hoc/connect"
class one extends Component {
  render() {...}
}
//函数形式map,可以作为回调函数,在高阶组件封装中调用
const mapStateToProps = (state)=>({
  age:state.age,
  sex:state.sex
})
export default connet(one)(mapStateToProps);//这是柯里化函数的用法,说明connet是一个柯里化函数

最新文章

  1. oracle日常——数据库备份
  2. 如何设置Oracle客户端与服务器的字符集一致
  3. CSS之照片集效果
  4. hadoop显示ConnectionrRefused
  5. SQLServer 开启远程访问,也可逆向思维进行关闭
  6. html的下拉框的几个基本使用方法
  7. 不想作死系列--win7远程linux桌面之vncserver
  8. 有个程序猿要去当CEO了:(二)扬帆起航
  9. Spring 为Bean对象执行初始化和销毁方法
  10. Not found org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
  11. 使用Fiddler改变线上js文件的引用路径
  12. 排序算法C++实现
  13. java-jdk动态代理生成的代理类源码
  14. C#工程详解
  15. test20180919 递归问题
  16. flutter 生命周期
  17. Ant多渠道批量打包
  18. Lucene 基础知识
  19. hiveSql常见错误记录
  20. Django之利用ajax实现图片预览

热门文章

  1. Three.js实现3D地图实例分享
  2. C++ 11 +,开坑。
  3. mysql相关面试题(一)
  4. 详解 TreeMap
  5. Redis入门使用 -- 个人总结
  6. 从零开始的计算机网络基础(图文并茂,1.8w字,面试复习必备)
  7. python3如何不生成pyc文件
  8. tensorflow1.0 构建神经网络做非线性归回
  9. C# 基础知识系列-13 常见类库(三)
  10. sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 0 行出错 sudo: /usr/lib/sudo/sudoers.so 必须只对其所有者可写 sudo: 致命错误,无法加载插件