• redux的hook使用


    此两篇redux专为甜豆所写,不论是否会关注或看到,希望你开心

    redux的hook使用

    hook版本的使用,能极简化代码操作,条理清晰。

    在上一节中讲到老版的redux如何使用。实话实说挺麻烦的,我们再来复习一下

    1、老版使用redux

    • 在需要使用redux的最大组件进行 引入与包装

      import {Provider} from 'react-redux'
      import store from './store' 			//此为store
      
      import App from './app';					//此为组件
      
      render(
        <Provider store={store}>
          <App/>
        </Provider>,
        document.getElementById('root')
      );
      
    • 在自组建入口配置中间件/mapStateToProps/mapDispatchToProps

      import {connect} from 'react-redux'
      import App from './App.js'
      
      const mapStateToProps = (state, ownProps) => {
        return {
          ...ownProps,
          ...state
        }
      }
      
      const mapDispatchToProps = (dispatch, ownProps) => {
        return {
          increase: who=>dispatch({type:"increase",who}),
          decrease: who=>dispatch({type:"decrease",who})
        }
      }
      
      export default connect(mapStateToProps,mapDispatchToProps)(App)
      
    • store的创建文件

      //不需要异步请求【不要中间件】
      //store.js
      import {createStore} from 'redux'
      import reducer from './reducer'
      
      export default createStore(reducer)
      
      =============================================
      //需要异步请求【要中间件】
      //store.js
      import {createStore,applyMiddleware} from 'redux'
      import thunk from 'redux-thunk'
      import reducers from './reducers'
      
      export default createStore(reducers,applyMiddleware(thunk))
      
    • reducer的文件创建

      const init = {
        num:1,
        who:'0',
        ui:true
      }
      export default function(state = init,action){
        switch(action.type){
          case 'increase':
            const {num,who} = state
            return {...state,num:num + 1,who:who+1}
          case 'decrease':
            return {...state,num:state.num - 1}
          case 'toggle' :
            return {...state,ui:!state.ui}
          default:
            return state
        }
      }
      
    • 子组件中调用action 【已放入mapDispatchToProps中,直接调用props中的方法即可】

      import React from 'react';
      
      const App = (props) => {
        return (
          <>
            {props.num}
            <button onClick={()=>props.increase('1')}>2222</button>
            {props.who}
          </>
        );
      }
      
      export default App;
      

    2、来看看hook版本

    • 子组件中调用action

      • useSelector替代mapStateToProps
      • useDispatch替代mapDispatchToProps

      因为能useDispatch获得dispatch方法,那就能够实现异步!!!!!!!!!!! 实际上可以封装一个专门做异步的方法避免多次重复import

      • 应当将方法 写成action 封装到actions中,此处为展示方便
      import React from "react";
      import { useSelector, useDispatch } from "react-redux";
      
      const Toggle = () => {
        const go = useSelector(state => state.go);
        const dispatch = useDispatch();
        const asyncfunc = () =>{
          setTimeout(()=>{
            dispatch({ type: 'toggle' })
          },1000)
        }
        return (
          <div>
            <div>{JSON.stringify(go)}</div>
            <input
              type="checkbox"
              value={go}
              onChange={() => asyncfunc()}
            />
          </div>
        );
      };
      
      export default Toggle;
      
    • store的创建文件 【无需在使用中间件,因为异步调用已解决 只需创建store即可】

      //store.js
      import {createStore} from 'redux'
      import reducer from './reducer'
      
      export default createStore(reducer)
      
    • 在需要使用redux的最大组件进行 引入与包装 【不变】

      import {Provider} from 'react-redux'
      import store from './store' 			//此为store
      
      import Toggle from './toggle';		//此为组件
      
      render(
        <Provider store={store}>
          <Toggle/>
        </Provider>,
        document.getElementById('root')
      );
      

    3、总结

    • 去掉 - 子组件入口 【即书写中间件层】
    • 增加 + 子组件的引入{ useSelector, useDispatch }
    • 减少 - ./store.js创建时嵌套中间件
  • 相关阅读:
    MySQL中的排序
    为什么删除记录表文件不会减小?(记录的插入与删除在磁盘上的变化)
    Mysql 中的MDL
    Redis 基础知识点总结
    分布式系统中的CAP理论与Base理论
    Java基础篇(JVM)——Class对象
    Java基础篇(JVM)——类加载机制
    Java基础篇(JVM)——总领
    数据结构与算法小结——排序(八)
    数据结构与算法小结——排序(七)
  • 原文地址:https://www.cnblogs.com/cc123nice/p/13441935.html
Copyright © 2020-2023  润新知