redux-toolkit是redux的升级版

安装

npm install @reduxjs/toolkit
// 在react中还需要搭配react-redux使用
npm install react-redux

模块的写法

// counterReducer.ts

import { createSlice, payloadAction } from '@reduxjs/tookit'
export const counterSlice = createSlice({
name: 'counter',
initialState: {
num: 0
},
reducers: { // 类似vuex的commit;reducers,reducers,reducers,不是reducer
// 写法类似vuex的commit,第一个参数默认是state,第二个是自己传的参数,
// payloadAction是内置用于ts情况下类型校验的,把参数包裹起来
increment(state, value: payloadAction<number>) {
state.num += value
}
}
})
// 导出
export const { increment } = counterSlice.action
export default counterSlice.reducer

创建仓库

// stroe/index.ts
import { configureStore } from '@reduxjs/tookit'
// 创建仓库configureStore
const store = configureStore({
// 模块,类似vuex的module
reducer: {
counter: counterReducer
}
})
// 导出
export type RootState = ReturnType<typeof store.getState> // 这两个是为ts定义类型用的
export type AppDispatch = typeof store.dispatch
// 这个重要
export default store

通过react-redux在组件中使用redux

1. 首先要在react应用的根组件provider

// index.jsx
import store from './store'
import { Provider } from 'react-redux'
root.render(
<React.strictMode>
<Provider store={store}>
<App />
</Provider>
</React.strictMode>
)

2. 然后才能在组件中使用

// 这两个是react用个来使用/操作redux的
import { useSelector, useDispatc } from 'react-redux'
import { increment } from '@/store/couterReducer'
export default function App() {
const num = useSelector((state: RootState) => state.counter.num)
const dispatch = useDispatch()
return (
<>
<p>{num}</p>
<button onClick={() => {
dispatch(increment()) //这就是触发reducer更改store的方法
}}> increment </button>
</>
)
}

Redux Toolkit——基操的更多相关文章

  1. Mongodb3.6 基操命令(二)——如何使用help

    前言 在上一篇文章Mongodb3.6 快速入门(一)中,我们主要使用两个命令: 1.mongod #启动服务 2.mongo #连接mongodb 对于刚接触mongo的人来说,该怎么给命令传递参数 ...

  2. mysql基操

    创建数据表: create table tt1( id int, name varchar(20), age int,sex boolean ); insert into tt1 values(1,& ...

  3. Redis的基操

    redis:通常BOLEAN操作类型,操作成功返回1,操作失败返回0 通常如果往设置的key插入值,但是这个key不存在,redis则会创建 向redis里的某个key插入多个值时,值和值之间用空格隔 ...

  4. Redis基操

    Redis key-value类型的缓存数据库 指定IP和端口连接redis: ./redis-cli -h ip -p port Redis基本操作命令 命令 返回值 简介 ping PONG 测试 ...

  5. MongoDB基操

    基本概念 database 数据库 包含多个collection collection 集合 包含多个文档document(类JSON对象) document 文档 一个文档对象中包含多个key-va ...

  6. JavaScript之基操

    局部变量前面要加var   如 var name = "jiahuai" 全局变量 name = "jiahuai" 写完每一行JavaScript代码用;号隔 ...

  7. MySql的基操勿六

    2018/12/6 星期四 19:34:07 authot by dabaine 数据库注释; -- 这就是注释 /*.....*/ 这也是注释 创建库; create databse [if not ...

  8. 小白学 Python 爬虫(19):Xpath 基操

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. nodejs的一些基操

    Nodejs 是基于 CHrome V8 引擎的 JaveScriptnpm: node 包管理器为我们提供了: nodejs 运行时,javascript 代码运行时的环境 提供了核心模块,具体会在 ...

  10. typroa 和markdown基操

    目录 标题 一级标题 二级标题 字体 图片 来插入图片,如在同意文件夹上,可直接加图片名 数学公式 编辑表格 标题 一级标题 二级标题 三级标题 无序标题 *加空格,无序标题 也可以使用ctrl = ...

随机推荐

  1. 修改ctags让fzf.vim插件显示C,C++方法声明的标签

    背景 在 vim 中使用 fzf.vim 插件可以进行方便的搜索文件, 源码TAG, GIT 记录等, 最近抽空看了下 BTags 命令在 c, c++ 文件中, 无法显示头文件中的函数声明 标签问题 ...

  2. Cesium给3dtileset中的每个瓦片添加一个billboard/label(六)

    2023-01-14 改了下思路,直接根据点击的位置转换为世界坐标系再添加label console.log(`鼠标点击位置为:${click.position}`); var cartesian = ...

  3. Linux环境安装Go

    1.下载Go发行版 从官方地址:https://golang.org/dl/ 上下载合适的 二进制发行版 (例如: go1.19.6.linux-amd64.tar.gz ): wget https: ...

  4. Java打印裴波那契数列

    //裴波那契数列的定义:他的第一项和第二项均为1,以后各项都为前两项的和.如: 1,1,2,3,5,8,13,21,34,55,89,144,233,~~~~ 关键代码如下: package fuxi ...

  5. CMSIS

    百度百科-CMSIS CMSIS 编辑 ARM Cortex 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) ...

  6. 问题集锦 ~ MySQL

    # 在存储过程中,变量赋值失败 declare parent text; select parent into Parent where id = 1; select Parent; 查询的字段不能和 ...

  7. 桌面应用(.exe)设置窗口默认最大化、全屏(electron)

    设置窗口默认最大化.全屏(electron) 一.默认最大化 win = new BrowserWindow({show: false}) win.maximize() win.show() 二.默认 ...

  8. TypeError: unsupported operand type(s) for |=: 'dict' and 'dict'

    原因:python3.9 支持对 dict 类型使用 |, 而较老的版本不支持 解决方案 :1. 用更新的 python 2. 把 | 操作替换成 {**d1, **d2} 来源:https://st ...

  9. vue中如何在子组件添加类似于watch属性监听父组件数据,数据变化时子组件做出相应的动作

    首先:我们需要在父组件中标签中定义一个 ref="parentObjVue" 其次:我们在子组件中,通过  var tmp=this.$refs.parentObjVue找到父组件 ...

  10. Deer_GF之图片

    Hi,今天介绍一下Deer_Gf里的图片组件.       框架介绍请移步[Deer_GF之框架介绍]       接下来为大家介绍一下框架里用到的图片组件及加载流程. 目录 大图(Texture)存 ...