Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何提高redux开发效率?当然是redux-tookit啦!

如何提高redux开发效率?当然是redux-tookit啦!

作者头像
程序员王天
发布于 2023-10-18 11:18:59
发布于 2023-10-18 11:18:59
39900
代码可运行
举报
运行总次数:0
代码可运行

# 前言

使用 react-redux 的朋友都经历过这种痛苦吧? 定义一个 store 仓库,首先创建各种文件,比如 reducer、action、store...,然后 将 redux 和 react 连接使用。整个流程繁琐,写起来代码冗余。 react-redux 创建仓库,文件目录如下:

好怀念使用 vuex 创建写仓库的日子....... 直到有一天我发现了 redux-toolkit ,原来 redux 还能这样写呀!

# 什么是 redux-toolkit

redux-toolkit 是官方推荐的编写 redux 逻辑的方法,简化了 redux 的配置过程,无需再创建 actions、reducer 的,更大程度方便使用 redux 仓库

# 基本使用

redux-toolkit 的使用步骤,可分为如下 5 步

  • 1、安装 redex-toolkit
  • 2、创建 slices
  • 3、创建 store
  • 4、将 Redux 连接到 React 应用(provide)
  • 5、在 React 组件中使用(useSelector、useDispath)

# 环境配置

vscode React Redux Toolkit RTK Quer 安装 npm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i redux react-redux @reactjs/toolkit

# 创建切片 slices

一个切片是一个包含 reducer 函数和 action creator 的对象。它定义了一部分状态和与该状态相关的操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// sliceTbale.js

import { createSlice } from "@reduxjs/toolkit";

const moviesSlice = createSlice({
  name: "movies",
  // c初始化状态
  initialState: {
    currentData: [], //
    tableData: [],
  },
  reducers: {
    delete_table: (state, { payload }) => {
      // 通过筛选实现删除
      state.currentTable = state.currentTable.filter((item: { id: any }) => {
        return item.id !== payload.id;
      });
      state.table = state.currentTable;
      message.success("删除成功");
    },
  },
});

export const { addMovie } = moviesSlice.actions; // 导出 action creator
export default moviesSlice.reducer; // 导出 reducer

# 创建仓库-store

我们使用 configureStore 函数来创建 Redux Store,并使用刚刚创建的 reducer 将切片与 Store 关联起来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建store仓库
import { configureStore } from "@reduxjs/toolkit";
import initTable from "./module/table";

const reduxStore = configureStore({
  reducer: {
    // xxx: xxx,
    table: initTable,
  },
});

export default reduxStore;

# redux 链接 react

完成以上步骤,redux 配置 ok 啦,如何让整个项目中应用 redux 呢? 使用Provider包裹 React 顶层组件,将 Redux store 对象传递给组件树中的所有组件,使得 Redux 的状态管理能够在整个应用程序中生效。 打开项目的入口文件 index.tsx,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import RouterConfig from "./router/routerConfig";
import RouterView from "./router/routerView";
import "nprogress/nprogress.css"; // 样式
import { Provider } from "react-redux";
import reduxStore from "./store";

const root = ReactDOM.createRoot(
  document.getElementById("root") as HTMLElement
);
root.render(
  <React.StrictMode>
    <Provider store={reduxStore}>
      <RouterView config={RouterConfig}></RouterView>
    </Provider>
  </React.StrictMode>
);

# 组件中使用 redux

使用状态和操作:在组件中,可以使用 useSelector 和 useDispatch 钩子来访问状态和触发 action。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";

interface IndexProps {}

const Index: React.FC<IndexProps> = (props) => {
  //  获取redux仓库数据
  const tableState = useSelector((state: any) => state.table);
  // 创建redux 派发器
  const Dispath = useDispatch();
  console.log("table仓库数据", tableState);
  return <>{tableState.currentData.length}</>;
};

export default Index;

# 进阶使用

redux 中如何执行异步呢? createAsyncThunk 创建异步操作, 通常用于发出异步请求。 createAsyncThunk 创建一个异步 action,方法触发的时候会有三种状态:

  • pending(进行中)
  • fulfilled(成功)
  • rejected(失败)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const getMovieData: any = createAsyncThunk(
  "sliceTable/getMovie",
  async () => {
    const res = await getMovieListApi();
    return res;
  }
);

# 完整示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import { getMovieListApi } from "../../API/home";
import { message } from "antd";
// // createAsyncThunk 创建异步操作, 通常用于发出异步请求。
// createAsyncThunk 创建一个异步action,方法触发的时候会有三种状态:
// pending(进行中)、fulfilled(成功)、rejected(失败)
export const getMovieData: any = createAsyncThunk(
  "sliceTable/getMovie",
  async () => {
    const res = await getMovieListApi();
    return res;
  }
);

const sliceName = createSlice({
  name: "sliceTable",
  initialState: {
    table: [],
    currentTable: [],
  },
  reducers: {
    initTable: (state, { payload }) => {
      // console.log('初始化sliceTable数据')
    },
    delete_table: (state, { payload }) => {
      // 通过筛选实现删除
      state.currentTable = state.currentTable.filter((item: { id: any }) => {
        return item.id !== payload.id;
      });
      state.table = state.currentTable;
      message.success("删除成功");
    },
    serach_table: (state, { payload }) => {
      // 通过筛选实现删除
      console.log("payload", payload);
      state.currentTable = state.table.filter((item: { name: string }) => {
        return item.name.includes(payload);
      });
    },
  },
  // 让 slice 处理在别处定义的 actions, // 包括由 createAsyncThunk 或其他slice生成的actions
  extraReducers: (builder) =>
    builder
      .addCase(getMovieData.pending, (state, { payload }) => {
        // state.loading = true
        console.log("异步请求 中");
      })
      .addCase(getMovieData.fulfilled, (state, { payload }) => {
        // state.loading = false
        console.log("拿到异步数据");
        state.table = payload.data.data.list;
        state.currentTable = payload.data.data.list;
      })
      .addCase(getMovieData.rejected, (state, { payload }) => {
        // state.loading = false
        // state.error = payload
        console.log("异步操作错误");
      }),
});

export const { initTable, delete_table, serach_table } = sliceName.actions;
export default sliceName.reducer;

extraReducers // extraReducers 字段让 slice 处理在别处定义的 actions, // 包括由 createAsyncg 或其他 slice 生成的 actions。

# 使用 connect 函数将 store 内的数据映射到组件 props 内

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { PureComponent } from "react";
import { connect } from "react-redux";
import { addNamesAction } from "./store/features/names";
export class Profile extends PureComponent {
  addNames(nameValue) {
    // console.log(nameValue)
    this.props.addNamesHandler(nameValue);
  }
  render() {
    const { names } = this.props;
    return (
      <div>
        <h2>Profile names: {names}</h2>
        <button onClick={(e) => this.addNames(", lzumiShinichi")}>
          addNames
        </button>
        <button onClick={(e) => this.addNames(", 大吉")}>addNames</button>
        <button onClick={(e) => this.addNames(", OkabeRintaro")}>
          addNames
        </button>
      </div>
    );
  }
}
const mapStateToProps = (state) => {
  return {
    names: state.names.names,
  };
};
const mapDispatchToProps = (dispatch) => ({
  addNamesHandler(namesValue) {
    dispatch(addNamesAction(namesValue));
  },
});
export default connect(mapStateToProps, mapDispatchToProps)(Profile);

参考 https://www.cnblogs.com/chccee/p/17145403.htmlopen in new window https://juejin.cn/post/7101688098781659172?searchId=20230919111823C8EB8D22FECCCE8115FC#heading-9open in new window https://juejin.cn/post/7105000617596157983?searchId=20230919111823C8EB8D22FECCCE8115FC#heading-21open in new window

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年9月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【案例】Linkedin如何用大数据变现
导读:对Linkedin商业数据分析部门而言,大数据分析不是什么高高在上、复杂枯燥的工作,而是一门化繁为简、高效实用的艺术。 在大数据时代,商业数据分析部门对一个公司的重要意义不言而喻。目前,很多公司的数据分析部门采用的都是“分析放在报表之上”的分析方法,即每天产出非常繁琐、复杂、海量、事无巨细的分析报告,但这些分析报告的可理解性和可执行性并不强。而Linkedin作为一个典型的数据驱动的公司,在进行数据分析时却反其道而行之,采用了“报表放在分析之上”的方法,化繁为简,以最快的速度在大数据金矿中发掘出最
小莹莹
2018/04/20
9540
【案例】Linkedin如何用大数据变现
张溪梦:庙算者多胜-大数据发展战略
时间:2014年6月6日上午 地点:北京国际会议中心 会议:中美创新链接·大数据专题研讨会 主办:中美创新协会,北京市科协 演讲人: 张溪梦,LinkedIn商务分析高级总监 演讲题目:庙算者多胜-大数据发展战略 以下为演讲全文: 感谢大家听我做汇报,我希望把我的演讲尽量变的更简短一些。我名字叫张溪梦,在美国大约做工作做了不到十年。主要目的就是做大数据分析,我以前是脑外科医生,做分析和做医生没有本质性区别,就是通过不同的症状来诊断事物本身的基本的比如说疾病。然后采用不同的方法治愈病人,让病人身体更健康。
大数据文摘
2018/05/21
6070
互联网大数据背后的秘密 分析创造商业价值
今天很多是创业公司或者BAT公司,大家把时间花在下面,美国做了一个研究,大部分数据分析师和科学家花很多的时间,只有10%时间创造很多的价值。那么势必我们会产生更少的价值,用更多的资源,我觉得企业急需要解决的问题。不应该把时间浪费在下面,要做大规模自动化。
IT阅读排行榜
2018/08/14
7740
互联网大数据背后的秘密 分析创造商业价值
曝光:硅谷巨头们如何玩赚大数据
今天要跟大家分享的文章来自曾小苏 Clara的《硅谷观察之大数据篇》,该作者是36氪驻硅谷首席代表,水瓶座B型血爱吃肉,传说中是个美女。在硅谷的一个月,她在 startups demo days 和各种大公司一日游中度日,她以为会逃脱国内各种会上各种“大数据”和挖掘机的梗,但万万没想到那里更甚。所以,本文发自繁华程度仅次于五道口的宇宙中心硅谷(呵呵呵呵~),与国内小伙伴分享大数据在那片土地上的真实生长状况。在上篇她着重为大家介绍了硅谷“大数据公司”的类型,下篇讲了硅谷四大不同类型的公司如何玩转大数据。
IT阅读排行榜
2018/08/14
5270
硅谷观察之大数据篇(完整版)
作者: 曾小苏 Clara 摘自:36氪 【上篇:挖掘机和“改变世界的”大数据公司们】 硅谷的这一个月,我在 startups demo days 和各种大公司一日游中度日,以为会逃脱国内各种会上各种“大数据”和挖掘机的梗,但万万没想到这里更甚。Hi~ 本文发自仅次于五道口的宇宙中心硅谷,与你分享大数据在这片土地上的真实生长状况。 什么是“改变世界”的大数据公司 近两周硅谷两场规模比较大的 demo 大会上,就有十多家自称做大数据的 startups,有做消费者行为的,有做体育分析的,有做 NGO 融资的,
大数据文摘
2018/05/23
6320
为什么大数据如此重要?
大数据 大数据是一种现代云基础架构,它包含了多种与其他人连接和共享信息的方法。它推动了“物联网”的发展,如通过社交网站连接人、通过共享朋友或网络来寻找人们之间互相认识的可能性。大数据的背后运行着人工智
小莹莹
2018/04/20
7430
为什么大数据如此重要?
【学习】如何进行大数据的入门级学习?
大数据是眼下非常时髦的技术名词,自然也催生出了一些与大数据相关的职业,通过对数据的分析挖掘来影响企业的商业决策。   这群人被称做数据科学家(Data Scientist),这个头衔最早由D.J.Pati和Jeff Hammerbacher于2008年提出,他们后来分别成为了领英(LinkedIn)和Facebook数据科学团队的负责人。而数据科学家目前也已经在美国传统的电信、零售、金融、制造、物流、医疗、教育等行业里开始创造价值。   不过在国内,大数据的应用才处于萌芽状态,人才市场还不太成熟,每家公司对
小莹莹
2018/04/20
5940
【学习】如何进行大数据的入门级学习?
大数据时代八大热门IT岗位
新的想法诞生新的技术,从而造出许多新词,云计算、大数据、BYOD、社交媒体、3D打印机、物联网……在互联网时代,各种新词层出不穷,令人应接不暇。 这些新的技术、新兴应用和对应的IT发展趋势,使得IT人必须了解甚至掌握最新的IT技能。另一方面,云计算和大数据乃至其他助推各个行业发展的IT基础设施的新一轮部署与运维,都将带来更多的IT职位和相关技能技术的要求。 毫无疑问,这些新趋势的到来,会诞生一批新的工作岗位,比如数据挖掘专家、移动应用开发和测试、算法工程师,商业智能分析师等,同时,也会强化原有岗位的新生命力
小莹莹
2018/04/20
8090
【每天一个数据分析师】面对毫无基础的业务人员,好的分析师解释逻辑,而不是细节
论坛君 “每天一个数据分析师”在第七期有幸采访到谢宇先生,他是中国联通广西分公司的大数据负责人,有超过7年的电信行业数据挖掘经验,目前主要负责大数据应用规划、基础平台设计、大数据商业变现。下面进入正题
小莹莹
2018/04/20
7100
【每天一个数据分析师】面对毫无基础的业务人员,好的分析师解释逻辑,而不是细节
【大数据】世界沉醉在数据里
我在美国加州硅谷参加了第八届全球Hadoop技术峰会(Hadoop Summit 2015)。在短短的3天时间里我既见识到了Hortonwork, Cloudera, SAP, IBM,惠普,雅虎等25+数据服务技术提供商围绕大数据设计开发的产品,也聆听了Schlumberger(能源巨头),verizon(通信巨头),迪斯尼(娱乐巨头),Airbnb(共享经济代表企业),赛门铁克(信息安全巨头),Aetna(医疗保险巨头)这些各行各业的领军企业用数据产品为公司创造价值的真实案例。我最大的感受就是有这
小莹莹
2018/04/23
6850
【大数据】世界沉醉在数据里
大数据告诉你,移动互联网是如何吃掉整个世界的
Managershare:这个世界已经被移动互联网改变了。它大到世界,小到我们每个人的生活细节。 没错,我们正站在这样一个特别的历史拐点上。 第一次,技术被销售给每个普通人 1. 十几年前,我们被 1
小莹莹
2018/04/20
6370
大数据告诉你,移动互联网是如何吃掉整个世界的
【干货】一篇文章详解:大数据框架、大数据采集平台、数据产品创建
导 读: 大数据听得耳朵起茧了,但真正能深入了解吗?不一定。在此特分享三个主题,分别是:不一样的大数据框架、不一样的大数据采集平台、神一样的数据产品。整编成一篇文章,与大家一起分享! 一、数据从哪里来
小莹莹
2018/04/23
1.9K0
【干货】一篇文章详解:大数据框架、大数据采集平台、数据产品创建
未来是数据科学的时代,也是数据科学家的时代
无论是在国内还是国外,数据科学都是目前最炙手可热的研究领域,数据分析师、数据科学家也是最火爆的职业。据LinkedIn的最新投票结果显示,“统计分析和数据挖掘” 是2014年最热门的职业技能,美国招聘
小莹莹
2018/04/23
7190
未来是数据科学的时代,也是数据科学家的时代
大数据落地不妨从Call Center数据开始
  Hadoop、YARN、全数据分析、数据建模等这些大数据名词纷至沓来时,不由你漠视大数据的趋势。但趋势归趋势,当你着手大数据应用时,从何着手就成为了一个非常现实的问题。 99%被忽视的数据   所谓大数据,让我们抛开其4V的特性,思考一些究竟有哪些数据应该进行分析,很多人将大数据理解为微博、微信等非结构化数据,实际上,很多行业/企业并不拥有这些数据,这些数据通常掌握在互联网厂商手里,对于很多行业/企业来说,基于互联网的应用很多还都是一个尝试性的阶段,对于互联网大数据分析还不是一个急迫的需求。   行业
小莹莹
2018/04/23
8500
大数据落地不妨从Call Center数据开始
☞【观点】徐尽欢:我也说说大数据
一:在Oracle做了六年数据库销售的我从5月份开始内部转到新成立的大数据部门,虽然还没有转完但是已经到新部门上了一个月的班了,如果我说我是Oracle 数据库部门最懂大数据的销售应该没人会反对吧!本周二上班跟负责电信的各路工程师头脑风暴,最后的结论是很让人气馁的,但是昨天和今天跟负责制造业和金融的同事头脑风暴,我真的看到了希望应该说很大的希望,接下来容我一一道来! 二:现在都说大数据,每个行业都在建,但是应该分分类,一种大数据是需求驱动性的,本来就是数据量大,我就想解决现在的问题,这种大数据建设很务
小莹莹
2018/04/20
9680
大数据的痛点
大数据分析仍处于初级阶段,我们还没有深入应用数据驱动决策。在这里,我们讲讨论当前的痛点以及如何用更好的方式应用大数据。 大数据为企业提供了一个更好的提高生产力和收入的机会。然而,企业在大数据收集上就遇到了麻烦。2012年,通过对300位高管和经理们的调查,清楚的展示了企业在管理大数据过程中的挑战和困难。下面是调查的要点: 66%的受访者希望企业里可以有更多的人使用分析工具。 59%的受访者认为,现有的分析框架处理大数据太慢了。 57%的受访者认为他们的分析框架无法与大数据的流入网络的速度匹配。 55%的
小莹莹
2018/04/20
2K0
大数据的痛点
祝贺大数据创业机会研讨会圆满结束 附嘉宾分享PDF下载
由PPV课发起举办的数据创客活动之大数据创业机会研讨会于10月31日在天使岛创客中心圆满落幕。 大数据是继云计算和物联网之后有一大颠覆性技术变革,尤其是今年8月份国务院出台了《促进大数据发展的行动纲要》,随后又出台了具体落地的时间表,国内的大数据发展可以说进入了一个新的历史阶段。与此同时,我们也可以看到国内大数据成熟的案例和应用还较少,人才的缺乏也制约了企业的发展,理性决策、靠数据说话的数据思维方式也需要进一步的普及。 由PPV课、天使岛创客空间联合举办的“数据创客系列活动”之《大数据创业机会研讨会》的
小莹莹
2018/04/20
7370
祝贺大数据创业机会研讨会圆满结束 附嘉宾分享PDF下载
【聚焦】电信大数据变现带来的跨界效应
在这个世界上你最亲密的伙伴是谁?爱人、家人通通都不是,最亲密的伙伴其实是你们的手机。在你每次触控手机时都会产生数据,这些大量的数据都被存储在电信运营商的系统中。这时运营商在想,如何将这些数据“变废为宝
小莹莹
2018/04/23
7460
【聚焦】电信大数据变现带来的跨界效应
祝贺广东大数据青年人才培养计划优秀学员被企业录取
《广东大数据青年人才培养计划》第一期学员企业录用,正式名单如下表: 姓名职位单位杨征数据分析师广州泰迪智能科技有限公司施兴数据分析师广州泰迪智能科技有限公司 祝贺以上学员! 广州泰迪智能科技有限公司是一家专业从事大数据挖掘软件基础研究、培训、咨询服务及数据挖掘应用开发的高科技集团公司。公司开始运作于2005年,是国内目前具有较强实力的数据挖掘系统研发及咨询服务商之一。 公司主导成立的中国AI创业研发俱乐部,是国内具有较大影响力和知名度的人工智能专业组织,其旗下网站:智能中国网 (www.5iAI.com),
小莹莹
2018/04/20
6100
祝贺广东大数据青年人才培养计划优秀学员被企业录取
大数据公司挖掘数据价值的49个典型案例
本文力图从企业运营和管理的角度,梳理出发掘大数据价值的一般规律: 以数据驱动的决策,主要通过提高预测概率,来提高决策成功率; 以数据驱动的流程,主要是形成营销闭环战略,提高销售漏斗的转化率; 以数据驱动的产品,在产品设计阶段,强调个性化;在产品运营阶段,则强调迭代式创新。 从谷歌、亚马逊、Facebook、LinkedIn,到阿里、百度、腾讯,都因其拥有大量的用户注册和运营信息,成为天然的大数据公司。而像IBM、Oracle、EMC、惠普这类大型技术公司纷纷投身大数据,通过整合大数据的信息和应用,给其他公司
机器学习AI算法工程
2018/03/09
5K1
推荐阅读
相关推荐
【案例】Linkedin如何用大数据变现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验