zoukankan      html  css  js  c++  java
  • react-redux不完全指北

    1、首先react-redux是用来在组件之间方便传输数据以及改变数据的工具

    2、常用的react-redux的方法是包含注入已经调用

    3、首先在最外层包含注入

    import { Provider } from 'react-redux'  // 全局包含
    ReactDOM.render(<Provider><Main /></Provider>, document.getElementById("main"))
    

    4、创建store(类似于全局变量)

    (1)基本架构

    import { createStore, combineReducers } from "redux"
    
    // 注入数据与方法
    import todos from "./store/todos"
    import test from "./store/test"
    
    // 创建Store与注入
    export default createStore(combineReducers({ todos, test }))
    

    (2)数据于方法

    // 初始化数据
    let initialState: any = 1
    
    // 返回数据,或者根据返回action变化返回内容
    export default function (state = initialState, action: any) {
        switch (action.type) {
            case 'test':
                console.log(1)
                state = state + 1
            default:
                return state
        }
    }
    

    4、然后在最外层就可以直接加上store

    import myStore from './redux'
    ReactDOM.render(<Provider store={myStore}><Main /></Provider>, document.getElementById("main"))
    

    5、接着就是每个需要用到store的页面都要加上connect(需要用到redux创建的全局变量的)

    import { connect } from "react-redux"
    // 第一个参数是包含全局参数的函数
    // 第二个参数是需要导入对象的函数
    // 这两个参数到最后都会倒回对象当中
    class Test extends React.Component {
      constructor(props) {
        super(props);
      }
     // 自己导入的 this.props.addTodo
     // 自己导入的 this.props.state
     render() {
        return (
          <div>1</div>
        );
      }
    }
    export default connect(
        (state: any) => state,
        { addTodo }
    )(Main);
    

    6、执行方法需要注意的,需要根据你自己给到内容判断执行那个方法

    // 例如现在就是以type来判断执行什么方法
    export const addTodo = () => ({
        type: 'test',
    })
    

    7、刚刚讲的就是简单的react-redux的使用方法,当使用react-hook+react-redux,那么使用起来就会更加的简单(用到react-hook的createContext)  

    import { createContext } from 'react'
    import { createStoreHook, createDispatchHook, createSelectorHook } from 'react-redux'
    // 整体核心
    export const MyContext = createContext(null)    // 创建context
    export const useStore = createStoreHook(MyContext)    // 创建独有的useStore(获取全局变量用的)
    export const useDispatch = createDispatchHook(MyContext)    // 创建独有的dispatch(执行方法用的)
    export const useSelector = createSelectorHook(MyContext)    // 创建独有的selector(查找变量用的)
    

    8、注入方式也有所不同

    import { MyContext } from '../utils/redux-hook'
    // 新增一个注入MyContext
    ReactDOM.render(<Provider context={MyContext} store={myStore}><Main /></Provider>, document.getElementById("main"))
    

    9、使用起来更加方便

    // 使用方法
    const Test = (props: any) => {
        const dispatch = useDispatch()
        return (
            <button onClick={() => dispatch({ type: 'test' })}>点击</button>
        )
    }
    // 查找元素
    const Test = () => {
        const store = useStore()
        // 获取全局
        console.log(store.getState())
    
        // 获取个别
        const counter = useSelector((state: any) => state.test)
        return (
            <div>{counter}</div>
        )
    }
    

      

  • 相关阅读:
    final和finally的区别
    ArrayList和LinkedList的区别
    collection和collections的区别
    第三次作业
    第二次作业
    第零次作业
    最后一次作业-- 总结报告
    第14、15教学周作业
    GridView去掉边框! 【转载于:http://magicpeng99.blog.sohu.com/】
    ASP.NET支持用Menu显示web.sitemap中定义好的网站链接 【转载】
  • 原文地址:https://www.cnblogs.com/huangqiming/p/13674549.html
Copyright © 2011-2022 走看看