zoukankan      html  css  js  c++  java
  • react-redux的理解

    理解

    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是一个柯里化函数
  • 相关阅读:
    js Object.freeze()
    js Object.seal()
    js数字千分位,三种写法,,拿走。。。
    nodejs mongoose连接mongodb报错,command find requires authentication
    nodejs express 服务代理
    容器监控之cadvisor
    kubernetes 集群卸载清理
    解决目录太大-建立软链接
    与运算(&)、或运算(|)、异或运算(^)
    jpa中将查询的字段返回为Map键值对类型
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/12594348.html
Copyright © 2011-2022 走看看