【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化

news2024/11/26 10:18:25

React 基础巩固(三十一)——store数据的订阅和Redux的优化

一、store数据的订阅

  1. store/index.js

    const { createStore } = require("redux");
    
    // 初始化数据
    const initialState = {
      name: "test",
      title: "hello redux",
    };
    
    function reducer(state = initialState, action) {
      // 采用switch 替代 if  
      switch (action.type) {
        case "change_name":
          return {
            ...state,
            name: action.name,
          };
        // case / return
        default:
          return state;
      }
    }
    
    // 创建的store
    const store = createStore(reducer);
    
    module.exports = store;
    
    
  2. test.js

    const store = require("./store");
    
    // 采用订阅方式
    const unsubscribe = store.subscribe(() => {
      console.log("subscribe:", store.getState());
    });
    
    // 使用action修改store中的数据
    store.dispatch({
      type: "change_name",
      name: "change name test",
    });
    
    store.dispatch({
      type: "change_name",
      name: "change name test111",
    });
    
    unsubscribe();
    
    

二、Redux的优化

  • redux代码优化:
    1. 将派发的action生成过程放到一个actionCreators函数中
    2. 将定义的所有actionCreators的函数,放到一个独立的文件中:actionCreators.js
    3. actionCreators 和 reducer 函数中使用字符串常量是一致的,所以将常量抽取到一个独立的constants.js文件中
    4. 将reducer和默认值(initialState)放到一个独立的reducer.js文件中
  1. test.js

    const store = require("./store");
    const { changeNameAction } = require("./store/actionCreators");
    
    // 采用订阅方式
    const unsubscribe = store.subscribe(() => {
      console.log("subscribe:", store.getState());
    });
    
    // 使用action修改store中的数据
    store.dispatch(changeNameAction("change name test"));
    
    store.dispatch(changeNameAction("change name test111"));
    
    unsubscribe();
    
    
  2. store/index.js

    const { createStore } = require("redux");
    const reducer = require("./reducer")
    
    // 创建的store
    const store = createStore(reducer);
    
    module.exports = store;
    
    
    
  3. store/actionCreators.js

    const { CHANGE_NAME } = require("./constants");
    // actionCreators: 帮助我们创建action
    
    const changeNameAction = (name) => {
      return {
        type: CHANGE_NAME,
        name,
      };
    };
    
    module.exports = {
      changeNameAction,
    };
    
    
  4. store/constants.js

    const CHANGE_NAME = "change_name";
    
    module.exports = {
      CHANGE_NAME,
    };
    
    
  5. store/reducer.js

    const { CHANGE_NAME } = require("./constants");
    
    // 初始化数据
    const initialState = {
      name: "test",
      title: "hello redux",
    };
    
    // 定义reducer函数:纯函数
    // 两个参数:
    // 1.store中上一次的值;
    // 2.本次需要更新的action
    // 返回值:它的返回值会作为sto re之后存储的state
    function reducer(state = initialState, action) {
      console.log("reducer:", state, action);
      // 有新数据进行更新的时候,那么返回一个新的state
      switch (action.type) {
        case CHANGE_NAME:
          return {
            ...state,
            name: action.name,
          };
        // case / return
        default:
          return state;
      }
    
      // 若没有新数据更新,返回之前的state
      // return state;
    }
    
    module.exports = reducer;
    
    
  6. 运行结果
    运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自然语言处理NLP介绍——NLP简介

目录 内容先进性说明内容大纲概要云服务器的使用 内容先进性说明 内容大纲概要 云服务器的使用

基于Java+SpringBoot+Vue+echarts健身房管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

工作中的二三事(非技术 向)

DB更换节点导致系统无法访问案 XX年X月X日,周一。spotfire所有预加载全显示在排队状态,end user无法打开,良率无法及时汇报,影响挺大。 背景: 两台spotfire服务器 处理过程: 开始怀疑和另一现地的情况一…

阿里云远程调用接口api

1.云市场--->api--->搜索那你想要的功能 2.举例想要天气预报功能 3.用postman进行演示

【云计算小知识】云环境是什么意思?有什么优点?

随着云计算的快速发展,了解云计算相关知识也是运维人员必备的。那你知道云环境是什么意思?有什么优点?云环境安全威胁有哪些?如何保证云环境的运维安全?这里我们就来简单聊聊。 云环境是什么意思? 云环境是…

Linux系列---【Aerospike的介绍】

Aerospike的介绍 Aerospike(以下简称AS)是一个以分布式为核心基础,可基于行随机存取内存中索引、数据或SSD存储中数据的数据库。它主要用于百G、数T等大数据量并且在数万以上高并发情况下,对性能也有毫秒级读取插入要求的场景。 B站视频链接:https://www…

SWF格式视频怎么转换成AVI格式?简单的转换方法分享

当你想要在不同的设备上播放视频时,将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放,而AVI格式则可以在更广泛的设备上播放,包括智能手机,平板电脑和电视机等。那么我们怎么将SWF转换成AVI…

数据库基础之——索引事务

索引(index|key) 1 概念 是数据库内部维护的一套数据结构,专门用于搜索的数据结构。目标就是提升搜索速度(性能)! 数据存储的数据主要保存在硬盘上,维护的索引数据结构同样也保存在硬盘上。…

动手学DL——深度学习预备知识随笔【深度学习】【PyTorch】

文章目录 2、预备知识2.1、数据操作2.2、线性代数&矩阵计算2.3、导数2.4、基础优化方法 2、预备知识 2.1、数据操作 batch:以图片数据为例,一次读入的图片数量。 小批量样本可以充分利用GPU进行并行计算提高计算效率。 数据访问 数组:np…

mfc100u.dll丢失的4种解决方法分享,快速修复mfc100u.dll文件

在现代数字化时代,计算机已经成为了我们生活和工作的不可或缺的一部分。然而,随着软件的不断发展和更新,有时我们可能会遇到一些令人头疼的问题,例如MFC100U.DLL文件的丢失。当你第一次看到这个错误提示时,估计是一脸懵…

学好Elasticsearch系列-核心概念

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 节点角色master:候选节点data:数据节点Ingest:预处理节点ml:机器学习节点remote_ cluster_ client:候选客户端节点transform:…

2022 China Open Source Report

| 翻译:黄绍雅、岳扬、刘文涛、李思颖 | 编辑:胡欣元 | 设计:胡欣元 As 2022 finally came to an end, we also emerged from the challenging years of the three-year-long COVID pandemic. The new edition of the "China Open Sourc…

【多选框、表格全选】element el-checkbox、el-table

话不多说 先看效果&#xff1a; 多选框&#xff1a; 表格全选&#xff1a; <template><div><div class"titleLabel"><div class"lineStyle"></div>统计部门</div><div style"display: flex"><e…

服务网格简介:探索现代微服务架构中的服务网格概念和价值

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Tiktok最全客户开发以及运营攻略,建议收藏

Tiktok最近很多粉丝朋友问我要怎么做&#xff0c;今天就来分享一下如何利用Tiktok开发客户以及运营思路&#xff0c;文章略长&#xff0c;需要安装包看文末&#xff0c;喜欢的点赞加关注。 一、外贸企业为什么要做Tiktok‍ TikTok作为一个全球范围内流行的短视频平台&#xf…

Django3 模糊查询/filters.SearchFilter的使用,基于viewsets.ModelViewSet

背景描述 模型 from django.db import modelsfrom interfaces.validate import validate_include from testcases.models import Testcases from utils.base_models import BaseModel from utils.pure_validator import JSONValidatorclass Interfaces(BaseModel):id models…

嵌入式Linux驱动开发——常见框架梳理

前言 本文主要介绍了Linux驱动开发中一些常用的驱动框架&#xff0c;platform、input、iic、spi等&#xff0c;硬件平台使用的是正点原子的imx6ull开发板。 一&#xff1a;Pinctrl子系统、Gpio子系统 不管什么框架最后都是要追溯到配置IO的电气属性和复用功能 如果要使用外部…

一起学数据结构(1)——复杂度

目录 1. 时间复杂度&#xff1a; 1.1 时间复杂度的概念&#xff1a; 1.2 时间复杂度的表示及计算&#xff1a; 1.3 较为复杂的时间复杂度的计算&#xff1a; 2. 空间复杂度&#xff1a; 2.1 空间复杂度的概念&#xff1a; 2.2 空间复杂度的计算&#xff1a; 1. 时间复杂度…

Kubernetes 简介:容器编排与集群管理的进化

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Mybatis-plus从入门到精通

1、什么是MyBatis-Plus MyBatis-Plus&#xff08;简称MP&#xff09;是一个基于MyBatis的增强工具&#xff0c;在MyBatis的基础上对其进行扩展&#xff0c;用于简化MyBatis操作&#xff0c;提高开发效率。它继承了MyBatis原生的所有特性&#xff0c;并且添加了一些额外的功能&…