【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

React 基础巩固(三十五)——ReduxToolKit (RTK)

一、RTK介绍

  1. Redux Tool Kit (RTK)是官方推荐的编写Redux逻辑的方法,旨在成为编写Redux逻辑的标准方式,从而解决上面提到的问题。

  2. RTK的核心API主要有如下几个:

    • configureStore:包装createStore以提供简化的配置选项和良好的默认值。它可以自动组合你的slice reducer,添加你提供的任何Redux中间件,redux-thunk默认包含,并启用Redux DevTools Extension。

      参数描述
      reducer将slice中的reducer组成一个对象传入此处
      middleware传入中间件
      devTools是否配置devTools工具,默认为true
    • createSlice:接受reducer函数的对象、切片名和初始状态值,并自动生成切片reducer,并带有相应的actions。

      参数描述
      name用户标记slice的名次
      initialState初始化值
      reducersreducer函数,对象类型,可添加多个
      createSlice返回值是一个对象,包含所有的actions
    • createAsyncThunk:接受一个动作类型字符串和一个返回承诺的函数,并生成一个pending/fulfilled/rejected基于该承诺分派动作类型的thunk。

二、RTK的简单使用

  1. 安装 toolkit 和 react-redux

    npm install @reduxjs/toolkit react-redux
    
  2. 利用 createSlice 构建store分片(store/features/counter.js)

    import { createSlice } from "@reduxjs/toolkit";
    
    // createSlice(用户标记slice的名称, )
    const counterSlice = createSlice({
      name: "counter",
      initialState: {
        counter: 989,
      },
      reducers: {
        addNumber(state, {payload}) {
          console.log("add number", payload);
          state.counter = state.counter + payload;
        },
        subNumber(state, {payload}) {
          console.log("sub number", payload);
          state.counter = state.counter - payload;
        },
      },
    });
    
    export const { addNumber, subNumber } = counterSlice.actions;
    
    export default counterSlice.reducer;
    
    
  3. 利用configureStore 配置store(store/index.js)

    import { configureStore } from "@reduxjs/toolkit";
    
    import counterReducer from "./features/counter";
    
    const store = configureStore({
      reducer: {
        counter: counterReducer,
      },
    });
    
    export default store;
    
    
  4. 利用react-redux,依照往常的做法,将store注入index.js

    import React from "react";
    import ReactDOM from "react-dom/client";
    import { Provider } from "react-redux";
    import App from "./App";
    import store from "./store";
    
    const root = ReactDOM.createRoot(document.getElementById("root"));
    root.render(
      // <React.StrictMode>
      <Provider store={store}>
        <App />
      </Provider>
      // </React.StrictMode>
    );
    
    
  5. 利用react-redux,依照往常的做法,在需要使用store及dispatch操作的页面文件中通过connect进行连接

    // Home.jsx
    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    import { addNumber } from "../store/features/counter";
    
    export class Home extends PureComponent {
      addNumber(num) {
        this.props.addNumber(num);
      }
    
      render() {
        const { counter } = this.props;
        return (
          <div>
            home:{counter}
            <button onClick={(e) => this.addNumber(5)}>+5</button>
            <button onClick={(e) => this.addNumber(8)}>+8</button>
            <button onClick={(e) => this.addNumber(18)}>+18</button>
          </div>
        );
      }
    }
    
    const mapStateToProps = (state) => ({
      counter: state.counter.counter,
    });
    
    const mapDispatchToProps = (dispatch) => ({
      addNumber(num) {
        dispatch(addNumber(num));
      },
    });
    
    export default connect(mapStateToProps, mapDispatchToProps)(Home);
    
    
    // Profile.jsx
    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    import { subNumber } from "../store/features/counter";
    
    export class Profile extends PureComponent {
      subNumber(num) {
        this.props.subNumber(num);
      }
    
      render() {
        const { counter } = this.props;
        return (
          <div>
            profile:{counter}
            <button onClick={(e) => this.subNumber(5)}>-5</button>
            <button onClick={(e) => this.subNumber(8)}>-8</button>
          </div>
        );
      }
    }
    
    const mapStateToProps = (state) => ({
      counter: state.counter.counter,
    });
    
    const mapDispatchToProps = (dispatch) => ({
      subNumber(num) {
        dispatch(subNumber(num));
      },
    });
    
    export default connect(mapStateToProps, mapDispatchToProps)(Profile);
    
    
  6. 将界面引入App.jsx

    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    import Home from "./pages/Home";
    import Profile from "./pages/Profile";
    import "./style.css";
    
    export class App extends PureComponent {
      render() {
        const { counter } = this.props;
    
        return (
          <div>
            <h2>App Counter: {counter}</h2>
            <div className="pages">
              <Home />
              <Profile />
            </div>
          </div>
        );
      }
    }
    
    const mapStateToProps = (state) => ({
      counter: state.counter.counter
    });
    
    export default connect(mapStateToProps)(App);
    
    
  7. 查看运行结果,和之前单独使用react-redux的效果一致,但在代码层面上化繁为简 在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UIKit相关

CALayer和UIView 区别 UIView继承自UIResponder&#xff0c;主要负责事件传递、事件响应&#xff0c;属于基于UIKit框架 CALayer继承自NSObject&#xff0c;负责图像渲染&#xff0c;动画和视图的显示&#xff0c;属于QuartzCore框架 而且这两大内容都符合单一职责原则&#…

拼多多海外版Temu商业模式分析

拼多多于2022 年 9 月在美国上线跨境平台 Temu&#xff0c;发布仅2个月就成为北美下载量最高的应用程序&#xff0c;持续霸榜。 这篇文章帮你快速了解下Temu&#xff1a; 商业模式如何竞争情况如何有哪些优势和挑战后期业务如何发展 一、Temu商业模式 Temu平台拥有对商品的最…

Java项目-苍穹外卖-Day01

文章目录 博客介绍软件开发流程项目介绍产品原型技术选型 博客介绍 从头开始做黑马的苍穹外卖项目 每天记录一下新学的知识点以及对应的开发进度 然后一些在项目中遇到的问题会重点标注 本篇主要是后端的&#xff0c;前端会一笔带过 软件开发流程 流程介绍需求分析需求规格说…

深入学习Mysql引擎InnoDB、MylSAM

目录 一、什么是MySQL 二、什么是InnoDB 三、什么是MyISAM 四、MySQL不同引擎有什么区别 一、什么是MySQL MySQL是一种广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是由瑞典MySQL AB公司开发并推广&#xff0c;后来被Sun Microsystems收…

网络安全-防御需知

目录 网络安全-防御 1.网络安全常识及术语 资产 漏洞 0day 1day 后门 exploit APT 2.什么会出现网络安全问题&#xff1f; 网络环境的开放性 协议栈自身的脆弱性 操作系统自身的漏洞 人为原因 客观原因 硬件原因 缓冲区溢出攻击 缓冲区溢出攻击原理 其他攻击…

拿捏--->打印菱形

文章目录 题目描述算法思路代码示例 题目描述 在屏幕上输出以下图案&#xff1a; 算法思路 代码示例 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {int n;scanf("%d", &n);//上半部分菱形for (int i 0; i < n; i) //上半部分…

《华为认证》SR MPLS BE配置

实验需求&#xff1a;在PE1和PE3之间建立mp-bgp邻居传递CE1和CE2的私网路由&#xff0c;并且使用SR mpls BE的方式传递私网流量 实验步骤 步骤1&#xff1a;配置设备接口ip地址以及AS 100内的igp协议&#xff08;略&#xff09; 步骤2&#xff1a;AS 100内的设备开启mpls &am…

【前端知识】React 基础巩固(四十三)——Effect Hook

React 基础巩固(四十三)——Effect Hook 一、Effect Hook的基本使用 Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时&#xff0c;不管是渲染、网路请求还是操作DOM&#xff0c;其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上&…

gitee修改代码提交操作步骤说明

一&#xff0c;简介 本文主要介绍如何从gitee仓库下载文件&#xff0c;本地修改&#xff0c;本地提交&#xff0c;然后再push到远程服务器的操作步骤。供参考&#xff0c;欢迎一起讨论交流~ 二&#xff0c;操作步骤 总的操作步骤分为以下几步 1&#xff0c;远程服务器下载文…

css3的filter图片滤镜使用

业务介绍 默认&#xff1a;第一个图标为选中状态&#xff0c;其他三个图标事未选中状态 样式&#xff1a;选中状态是深蓝&#xff0c;未选中状体是浅蓝 交互&#xff1a;鼠标放上去选中&#xff0c;其他未选中&#xff0c;鼠标离开时候保持当前选中状态 实现&#xff1a;目前…

如果你也能认识并使用这个低代码平台,那真的是泰酷辣——iVX低代码平台

低代码技术起源是比较悠久的了&#xff0c;尤其是在近些年&#xff0c;随着技术的演进&#xff0c;低代码平台逐渐成为热门趋势。这些平台通过简化应用程序开发流程&#xff0c;减少手动编码&#xff0c;使非专业开发人员也能快速构建复杂应用。为我们的敏捷开发和高效生产贡献…

攻防世界-web-lottery

题目描述&#xff1a;里面有个附件&#xff0c;是网站的源代码&#xff0c;还有一个链接&#xff0c;是线上的网站 主页告诉了我们规则&#xff1a; 1. 每个人的初始金额为20美元 2. 一支彩票2美元&#xff0c;挑选7个数字&#xff0c;根据匹配上的数字有不同的奖励 我们先体…

2023.7月最新ORACLE考试通过|微思-ORACLE官方授权中心

微思-ORACLE官方授权培训中心 2022 ORACLE OCP考试战报https://blog.csdn.net/XMWS_IT/article/details/125866726?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169089281916800182194373%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&r…

数组中重复的数字_剑指 Offer 03

文章目录 题目描述法一 哈希表 题目描述 法一 哈希表 int findRepeatNumber(vector<int>& nums){unordered_map<int, bool> map;for(const int& num:nums){if(map[num]) return num;map[num]true;}return -1;}

Linux系统CPU和磁盘性能进程分析工具pidstat

一、pidstat对CPU的分析 Linux 上的pidstat(1)工具按进程或线程打印CPU 用量&#xff0c;包括用户态和系统态时间的分解。默认情况下&#xff0c;仅循环输出活动进程的信息。例如&#xff1a; 这个例子捕捉到了系统备份&#xff0c;包含了tar(1)命令&#xff0c;从文件系统读取…

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks &#xff08;Java 虚拟机栈&#xff09; 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xff0c;对应着每次方法调用时所占用的内存每个线程只能有一个活动…

《TCP IP 网络编程》第十五章

第 15 章 套接字和标准I/O 15.1 标准 I/O 的优点 标准 I/O 函数的两个优点&#xff1a; 除了使用 read 和 write 函数收发数据外&#xff0c;还能使用标准 I/O 函数收发数据。下面是标准 I/O 函数的两个优点&#xff1a; 标准 I/O 函数具有良好的移植性标准 I/O 函数可以利用…

基于 FFlogs API 快速实现的 logs 颜色查询小爬虫

文章目录 找到接口解析响应需要平均颜色和过本次数&#xff1f; 找到接口 首先试了一下爬虫&#xff0c;发现和wow一样官网上有暴露的 API&#xff0c;链接在&#xff1a;FFlogs v1 API 文档链接 通过查询官方提供的 API 接口得知&#xff1a; user_name 角色名字 api_key …

Django Rest_Framework(一)

1. Web应用模式 在开发Web应用中&#xff0c;有两种应用模式&#xff1a; 前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。] 前后端分离【把前端的界面效果(html&#xff0c;css&#xff0c;js分离到另一个服务端或另一个目录下&#xff0c;python服务…

翻转卡片游戏(力扣)

题目 在桌子上有 n 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;然后选择其中一张卡片。 如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同&#…