• react-redux


    一、Redux与组件

     

    react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构

     

    React-Redux提供connect方法,用于从UI组件生成容器组件,connect的意思就是将两种组件连起来

    二、react-redux的基本用法

    (1)、引入

    import {Provider} from "react-redux";

    在根组件外层嵌套一个Provider.   

    Provider的作用就是将store传递给每一个子组件,每一个子组件就都可以使用store了,不需要重复的在组件中引入store

    它可以将store传递给包裹的所有的子元素  provider组件有一个属性 store 用来接受store

    (2)、connect进行连接

    (1)、在子组件中引入connect

    import { connect } from "react-redux";

     

    (2)进行连接

    export default connect(mapStateToProps)(组件名称)

     

    connect()():

    第一个括号里面有三个参数

    第一个参数:mapStateToProps

    解释:

    mapStateToProps其实就是一个规则,把store里面的state映射到当前组件的 props中

    第二个参数:mapDispatchToProps

    解释:

    (1)、mapDispatcherToProps 这个方法用来修改数据,这个方法中有一个参数为dispatch. 

    (2)、如果说mapStateToProps是将store的数据拿到当前组件使用,那么mapDispatcherToProps就是提高了一些方法让你如果进行数据的修改(方法需要自己去写,依旧要把action返回给Store),这个方法被映射的this.props中。dispatch是用来发送action的

    第二个括号:需要传递组件名称

    1、list.js

    import React, { Component } from 'react' import { connect } from "react-redux"; class List extends Component { render() { let { list } = this.props return ( <div> <ul> { list.map((item, index) => ( <li key={index}>{item} <button onClick={this.props.handleDel.bind(this, index)}>删除</button> </li> )) } </ul> </div> ) } } const mapStateToProps = (state) => ({ list: state.getIn(["todo", "list"]) }) const mapDispatchToProps = (dispatch) => ({ handleDel(index) { let action = { type: "DEL_ITEM", value: index } dispatch(action); } }) export default connect(mapStateToProps, mapDispatchToProps)(List)

    2、input.js
    import React, { Component } from 'react'
    import {connect} from "react-redux";
    class Input extends Component {
    render() {
    return (
    <div>
    <input type="text" value={this.props.inputVal} onChange={this.props.handleChange.bind(this)}/>
    <button onClick={this.props.handleAdd.bind(this)}>点击</button>
    </div>
    )
    }
    }

    const mapStateToProps = (state)=>({
    inputVal:state.getIn(["todo","inputVal"])
    })

    const mapDispatchToProps = (dispatch)=>({
    handleChange(e){
    let val = e.target.value;
    let action = {
    type:"TODO_CHANGE",
    value:val
    }

    dispatch(action);
    },
    handleAdd(){
    let action = {
    type:"TODO_ADD"
    }

    dispatch(action);
    }
    })

    export default connect(mapStateToProps,mapDispatchToProps)(Input);
     
    3、todoReducer.js
    import immutable from "immutable";

    const defaultState = immutable.fromJS({
    inputVal: "123",
    list: [111]
    })

    export default (state = defaultState, action) => {
    switch (action.type) {
    case "TODO_CHANGE":
    return state.updateIn(["inputVal"], () => action.value);
    case "TODO_ADD":

    let newState = state.getIn(["list"]).push((state.getIn(["inputVal"])));

    return state.updateIn(["list"], () => newState).updateIn(["inputVal"], () => "");
    case "DEL_ITEM":
    let arr = state.getIn(["list"]).toArray();
    arr.splice(action.value,1);

    return state.updateIn(["list"],()=>immutable.List(arr));


    }
    return state;
    }
     
    4、index.js
     
    import {createStore} from "redux";
    import {combineReducers} from "redux-immutable";
    import num from "./reducer/numReducer";
    import todo from "./reducer/todoReducer";
    const reducer = combineReducers({
    num,
    todo
    })

    const store = createStore(reducer);

    export default store;
     
    5、APP.js
     
    import React, { Component } from 'react';
    import {connect} from "react-redux";
    import List from "./components/list";
    import Input from "./components/input";
    class App extends Component {
    render() {
    return (
    <div>
    <h2>{this.props.n}</h2>
    <button onClick={this.props.handleAdd.bind(this)}>修改数据</button>
    <hr/>
    <Input/>
    <List/>
    </div>
    );
    }
    componentDidMount(){
     
    }
    }



    const mapStateToProps = (state)=>({
    n:state.getIn(["num","n"])
    })



    const mapDispatchToProps = (dispatch)=>({
    handleAdd(){
    dispatch(numAddAction());
    }
    })

    export default connect(mapStateToProps,mapDispatchToProps)(App);

      

    mapStateToProps

    作用:

    建立一个从(外部的)state对象到(UI 组件的)props对象的映射关系。

    mapStateToProps会订阅 Store,每当state更新的时候,就会自动执行,重新计算 UI 组件的参数,从而触发 UI 组件的重新渲染

     

    调用的时候this.props.【key值】

     

    mapDispatchToProps

    作用:

    用来建立 UI 组件的参数到store.dispatch方法的映射。也就是说,它定义了哪些用户的操作应该当作 Action,传给 Store。它可以是一个函数,也可以是一个对象

     

    mapDispatchProps的用法

     

    const mapDispatchProps = (dispatch)=>({

    函数名称:function(){

    dispatch(action)

    }

    })

    mapDispatchProps函数需要返回出去一个函数 这个函数中用dispatch传递一个action

     

    最终子组件变成了UI组件 connect返回最终的容器组件,react-redux建议我们把所有的数据都放在store中

     

    调用:this.props.函数名称()

  • 相关阅读:
    ASCII码对照表 And HTML字符实体
    操作系统自带命令查看文件的哈希
    HMAC简介及HMAC-SHA256实现Demo
    CSV文件注入漏洞简析
    Kubernetes集群的安全机制
    Kubernetes -- Horizontal Pod Autoscaler
    获取两坐标之间距离
    在CentOS 7中搭建Git服务器
    centos7 搭建svn服务器
    node.js依赖express解析post请求四种数据格式()
  • 原文地址:https://www.cnblogs.com/ray123/p/10925746.html
Copyright © 2020-2023  润新知