• react系列---【redux安装、创建仓库】


    redux基础

    react(组件) ---》react-redux《---- redux(数据)---》redux-thunk(fetch)《 后端

    官网

    https://www.cntofu.com/book/4/index.html

    三大原则:

    1.单一数据源
    2.state是只读的
    3.只能通过纯函数修改state
    

    安装

    npm i redux --save
    

    核心概念

    0.createStore()

    创建仓库

    import { createStore } from "redux"
    
    // 1.初始化数据
    let initState={
        name:"妲己",
        age:20,
        sex:"女"
    }
    /**
     * state:上一次修改完的状态,第一次设置为初始值
     * action:
            {type:'changeName',name:'王昭君'}
            {type:'changeAge',age:100}
            {type:'changeDiao'}
            {type:'changeSex'}
    */
    
    // 2.唯一修改state的函数
    function reducer(state=initState,action){
        switch(action.type){
            case "changeName":
                state.name=action.name;
                return state;
            case "changeAge":
                state.age=action.age;
                return state;
            case "changeDiao":
                state.name="貂蝉"
                return state;
            case "changeSex":
                state.sex="男";
                return state;
            default:
                return state;
    
        }  
    }
    
    // 3.创建仓库
    let store = createStore(reducer);
    
    // 4.导出仓库
    export default store;
    
    1.getState()
    // 5.查看仓库数据 store.getState()
    console.log(store.getState());
    
    2.dispatch(action)
    // 6.通过dispatch派发action ,从而触发reducer,进行修改state
    store.dispatch({type:'changeDiao'})
    
    store.dispatch({type:"changeName",name:"王昭君"})
    
    3.添加订阅者 subscribe()
    let unsub=store.subscribe(()=>{
        console.log(store.getState());
    })
    
    4.取消订阅者
    // 8.取消订阅者
    unsub()
    

    React-redux

    1.安装

    cnpm i react-redux --save
    

    2.入口文件通过Provider关联store和App

    import store from "./store/index"
    
    import {Provider} from "react-redux"
    
    ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>
      ,
      document.getElementById('root')
    );
    

    3.组件改为容器型组件;

    import React, { Component } from "react";
    import { connect } from "react-redux";
    class C extends Component {
      render() {
        let { name, age, changeAge, changeName } = this.props;
        return (
          <div className="box">
            <h3>this is C</h3>
            <div>name:{name}</div>
            <div>age:{age}</div>
            <button onClick={() => changeName("小鲁班")}>小鲁班</button>
          </div>
        );
      }
    }
    
    let mapStateToProps = (state) => ({
      name: state.name,
      age: state.age,
      sex: state.sex,
    });
    
    let mapDispatchToProps = (dispatch) => ({
      changeName: (name) => dispatch({ type: "changeName", name: name }),
      changeAge: (age) => dispatch({ type: "changeAge", age: age }),
    });
    //容器型组件:该组件从状态中取数据,他一般都是路由组件,也是类定义组件
    //展示型组件:该组件数据从父组件来,一般是木偶组件,也是函数定义组件
    export default connect(mapStateToProps, mapDispatchToProps)(C);
    
    

    4.reducer修改state应该返回一个新的state

    function reducer(state=initState,action){
        switch(action.type){
            case "changeName":
                
                return {
                    ...state,
                    name:action.name
                };
            case "changeAge":
                return {
                    ...state,
                    age:action.age
                };
            case "changeDiao":
                return {
                    ...state,
                    name:"貂蝉"
                };
            case "changeSex":
                return {
                    ...state,
                    sex:"男"
                };
                
            default:
                return state;
    
        }  
    }
    
  • 相关阅读:
    博客园随笔备份Java脚本
    vue 获取 referer
    EntityFramework的天坑
    清空stringbuilder
    相关的验证的正则表达式
    清空StringBuilder的三种方法及效率
    oracle中的字符串函数详解
    浅谈C# application.DoEvent作用
    C# 简单Tcp通信demo
    C#中http请求下载的常用方式demo
  • 原文地址:https://www.cnblogs.com/chenhaiyun/p/14869103.html
Copyright © 2020-2023  润新知