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

这篇具有很好参考价值的文章主要介绍了【前端知识】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 初始化值
      reducers reducer函数,对象类型,可添加多个
      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的效果一致,但在代码层面上化繁为简 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK),前端知识,React,前端,react.js,前端框架文章来源地址https://www.toymoban.com/news/detail-611620.html

到了这里,关于【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端知识】React 基础巩固(三十九)——React-Router的基本使用

    Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号) 尝试在项目中使用HashRouter: 安装Router 在 index.js 中引入并使用HashRouter Routes:包裹所有的Route,在其中匹配一个路由(

    2024年02月14日
    浏览(65)
  • 【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化

    通过组件的生命周期来完成网络请求,网络请求的异步代码直接放在组件中 通过redux来管理异步网络请求 在store中引入中间件 redux-thunk 构建 fetchHomeMultidataAction ,将原本在组件中的异步请求代码放入到actionCreators.js中 改写原来的category.jsx,派发异步请求的dispatch 查看运行结果

    2024年02月15日
    浏览(69)
  • 【前端知识】React 基础巩固(三十二)——Redux的三大原则、使用流程及实践

    单一数据源 整个应用程序的state被存储在一颗object tree 中,并且这个object tree 只存储在一个store中; Redux并没有强制让我们不能创建多个Store,但是那样做不利于数据维护; 单一的数据源可以让整个应用程序的state变得方便维护、追踪、修改; State是只读的 唯一修改State的方法

    2024年02月15日
    浏览(61)
  • 【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化

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

    2024年02月15日
    浏览(49)
  • 【前端知识】React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码

    利用Monkey Patching,修改原有的程序逻辑,在调用dispatch的过程中,通过dispatchAndLog实现日志打印功能 redux中利用中间件 redux-thunk 可以让dispatch不不仅能处理对象,还能处理函数 单个调用函数来应用中间件,非常不方便,封装一个函数来合并中间件 在store/index.js中应用上面三个

    2024年02月14日
    浏览(52)
  • 【前端知识】React 基础巩固(十三)——列表渲染

    在 React 中没有像 Vue 模块语法中的 v-for 指令,而是需要我们通过 JS 代码的方式组织数据,转成 JSX 在 React 中,展示列表最多的方式就是使用数组的 map 高阶函数 在展示数组前,有时会进行一些处理 过滤一些内容(filter 函数) 截取数组中的一部分内容(slice 函数) 列表中的

    2024年02月10日
    浏览(53)
  • 【前端知识】React 基础巩固(二十八)——StrictMode

    StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样,StrictMode 不会渲染任何可见的 UI 为后代出发额外的检测和警告 严格模式检查仅在开发模式下运行,不影响生产构建 严格模式检查什么? 识别不安全的生命周期 使用过时的 ref API 检查意外的副作用 组件

    2024年02月16日
    浏览(50)
  • 【前端知识】React 基础巩固(二十七)——Fragment

    Fragment 允许将子列表分组,而无需向 DOM 添加额外节点 可以采用语法糖 / 来替代 Fragment,但在需要添加 key 的场景下不能使用此短语 查看Fragment应用后的效果

    2024年02月16日
    浏览(61)
  • 【前端知识】React 基础巩固(四十)——Navigate导航

    新建Login页面,在Login中引入Navigate,实现点击登陆按钮跳转至 /home 路径下: 当路由均无匹配时,通过Navigate跳转至NotFound界面,其中 * 为通配符: 构建NotFound.jsx 在App.jsx中配置NotFound: 构建Home的子路由页面: HomeRecommend.jsx HomeRanking.jsx 利用 Route 嵌套子路由,实现Home页面下的

    2024年02月14日
    浏览(63)
  • 【前端知识】React基础巩固(二)——JSX注意点

    createElement存在的问题: 繁琐不简洁 不直观,无法一眼看出所描述的结构 不优雅,开发体验不好 JSX 简介:JSX 是 JavaScript XML 的简写,表示了在JS代码中写XML(HTML)格式的代码 优势:声明式语法更加直观,与HTML结构相同,降低学习成本,提高开发效率 JSX 是 react 的核心内容‘

    2024年02月09日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包