• React之Redux的使用配置


    在使用redux之前,首先了解一下redux到底是什么?

    用过vue的肯定知道vuex,vuex是vue中全局状态管理工具,主要是用于解决各个组件和页面之间数据共享问题,对数据采用集中式管理,而且可以通过插件实现数据持久化

    redux跟vuex类似,最主要的就是用作状态的管理,redux用一个单独的常量状态state来保存整个应用的状态,可以把它想象成数据库,用来保存项目应用中的公共数据

    Redux最主要是用作应用状态的管理。简言之,Redux用一个单独的常量状态树(state对象)保存这一整个应用的 状态,这个对象不能直接被改变。当一些数据变化了,一个新的对象就会被创建(使用actions和reducers),这 样就可以进行数据追踪,实现时光旅行。

    redux三大原则

    1. state以单一的对象存储在store中

    2. state是只读的只能通过action修改

    3. 使用纯函数reducer执行数据的更新

    redux执行流程

    1. React组件从store获取redux中的数据

    2. 当页面数据要进行修改的时候,我们通过dispatch提交actions到store

    3. store把actions提交reducers中执行对应的逻辑,修改state中的数据

    4. 更新后的state数据返回到store中,更新React组件页面上的数据

    redux具体使用

    在使用redux之前,我们首先要安装redux,通过下面命令进行安装

    npm i redux --save
    

    安装好可以在根目录package.json文件检查是否安装成功

     接下来开始配置redux,首先在src目录下创建一个store文件夹,用来存放redux数据

    接着在store新建一个js文件index.js,在index.js中配置redux内容

    执行流程

    在index.js中导入createStore方法,创建redux数据的方法

    1. 创建reducers出函数,纯函数有两个参数state 初始化的数据 ,actions修改state数据逻辑

    2. switch判断actions中提交type类型执行state修改,返回修改的结果

    3. createStore方法创建store对象,export default 抛出对象的值

    4. 在使用redux的页面导入index.js文件即可

    store/index.js

    1. //1. 导入createStore方法
    2. import { createStore } from "redux";
    3. //2. 创建一个reducer纯函数的方法, state初始化数据, actions修改数据行为
    4. const reducer = function (state, actions) {
    5. //定义初始化的数据
    6. if (!state) {
    7. state = {
    8. count: 10,
    9. }
    10. }
    11. //定义actions的逻辑代码区域,处理逻辑的信息
    12. switch (actions.type) {
    13. //调用执行+1的逻辑
    14. case "PLUS":
    15. return {
    16. ...state,
    17. count: state.count + actions.payload,
    18. }
    19. break;
    20. case "JIAN":
    21. return {
    22. ...state,
    23. count:state.count-actions.payload
    24. }
    25. break;
    26. default:
    27. return {
    28. ...state
    29. }
    30. }
    31. }
    32. //创建store的对象
    33. const store = createStore(reducer);
    34. //抛出store的对象值
    35. export { store };

    redux使用流程

    获取redux中的数据,通过store.getState()

    修改数据使用dispatch   

    dispatch({type:"类型",payload:额外的参数})

    home.js

    1. import React, { useEffect, useState } from 'react';
    2. import { store } from './index';
    3. export default function Home(props) {
    4. const [counts,setCounts]=useState(store.getState().count)
    5. useEffect(()=>{
    6. let unsubscribe=store.subscribe(()=>{
    7. let {count}=store.getState()
    8. console.log(count);
    9. setCounts(count)
    10. })
    11. return()=>{
    12. unsubscribe()
    13. }
    14. },[])
    15. return (
    16. <div>
    17. <h3>{counts}h3>
    18. <button onClick={()=>store.dispatch({type:'PLUS',payload:2})}>count++button>
    19. <button onClick={()=>store.dispatch({type:'JIAN',payload:2})}>count--button>
    20. div>
    21. )
    22. }

    直接调用方法页面数据不发生变化,我们使用useEffect和subscribe对数据进行监听,监听页面数据的刷新和更改

     

  • 相关阅读:
    drf-yasg 的 Swagger 文檔
    ffmpeg的部署踩坑及简单使用方式
    杰理之SPP 连接和断开事件处理【篇】
    CarEye 管理系统开发基本约定
    匿名插槽,具名插槽,作用域插槽
    VSCode使用简介
    计数排序法
    Java笔记【方法、数组】
    Mybatis - 一对多/多对一映射
    java.awt.HeadlessException
  • 原文地址:https://blog.csdn.net/qq_60976312/article/details/126231683