当前位置: 首页 > article >正文

[redux] ts声明useSelector和useDispatch

先安装

安装 | Redux 中文官网

npm install react-redux
npm install @reduxjs/toolkit

定义一个切片

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

const userSlice = createSlice({
  name: 'user',
  initialState: {
    name: 'lsm',
    age: 24,
  },
  reducers: {},
});
//注意这里写导出reducer, 如果你不写就得在index.ts导入的时候写
export default userSlice.reducer;

总仓库导入

import { configureStore } from '@reduxjs/toolkit';
import userSlice from './user';
import shopSlice from './shop';
const store = configureStore({
  reducer: {
    user: userSlice,
    shop: shopSlice,
  },
});
// 从 store 本身推断出 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>;
export default store;

main.ts导入

怎么使用?

这样就行,返回的是总state, 得拿一个出来,这个时候发现点的时候没有提示????怎么办

其实,这2个是一个东西,结果是true,所以只要拿到state的类型就行

  const userStore = useSelector((state) => {
    console.log(state == store.getState());//true
  });

所以在index.ts里顺便导出

// 从 store 本身推断出 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>;

不想写泛型, 这样写也可行

  const shopStore = useSelector<RootState>((state) => state.shop);
  const userStore = useSelector((state: RootState) => state.user);
  console.log(shopStore);
  console.log(userStore);

这时候你会好奇了 

ReturnType是什么

你传一个函数的类型进去会自动推断出返回值的类型了

typeof 是获取函数的类型, ReturnType会根据函数的类型推断出它的返回值类型的值

当然, 你也可以先调用store.getState()获取返回值,再用typeof获取返回值的类型也可以,但这样太蠢了!!! 不够优雅!

// 从 store 本身推断出 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>;
//这样也可
const RootStateData = store.getState();
export type RootStateDataType = typeof RootStateData;





但还是很麻烦,外面引入还得声明(state: RootState)

所以在导出的时候重写函数就行了

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

export const useAppDispatch: () => AppDispatch = useDispatch;
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;


http://www.kler.cn/a/466836.html

相关文章:

  • element-plus大版本一样,但是小版本不一样导致页面出bug
  • 【可实战】测试用例组成、用例设计方法、用例编写步骤、测试用例粒度、用例评审(包含常见面试题)
  • OpenGL入门最后一章观察矩阵(照相机)
  • 【软考网工笔记】计算机基础理论与安全——网络安全
  • 让css设置的更具有合理性
  • 音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现
  • 嵌入式 Linux LED 驱动开发实验
  • 运维工具汇总
  • 【数据分析实战】24年T4某二手车交易平台数据分析
  • 【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
  • 【数据库】简答题汇总
  • 力扣28找出字符串中第一个匹配项的下标
  • PyTorch中的__init__.pyi文件:作用与C++实现关系解析
  • 《探秘开源大模型:AI 世界的“超级引擎”》
  • Github 2024-12-30 开源项目周报 Top15
  • Chrome浏览器实例的TypeScript自动化脚本
  • Uniapp跨域请求
  • ​​​​​​​CDP集群安全指南系列文章导读
  • 无人机解码物流配送技术详解
  • ReactiveStreams、Reactor、SpringWebFlux
  • 【深度学习遥感应用中的“信息”】空间信息、语义信息、纹理信息、边缘信息、表层信息、深层信息...
  • 探索 AIGC 的基础知识:人工智能生成内容的全景视图
  • 深入解析与实践:MySQL
  • React实现长列表
  • python的reload
  • Java重要面试名词整理(十四):elasticsearch