首页 > 其他分享 >在非React组件的文件中使用Reudx 会造成的问题及解决方案

在非React组件的文件中使用Reudx 会造成的问题及解决方案

时间:2023-10-07 14:37:25浏览次数:44  
标签:文件 ts React 使用 组件 redux Reudx store

Redux的使用场景

  • 函数式组件内(hooks调用redux)
  • 其他文件(无法使用hooks调用redux)

这里函数式组件内使用Redux不再赘述,站内跳转,Redux toolkit使用

一、非函数式组件的文件内使用redux

useDispatch 和 useSelector 这两个hooks只能在函数组件内使用,在非函数组件的文件(以下简称三方文件)就无法使用了。
有些人就会说简单啊,直接把redux 里的store引过来。恭喜你,你很可能造成了一个很大的隐患。

下面就来详细说说,redux store是单例,是通过注入的方式使得你能在下面所有层级的组件中使用他,<Provider store={store}><App /></Provider>,但是三方文件明显无法直接使用他。
当然直接拿到store示例然后使用上面的方法,肯定是能改变,但是通常会造成一个问题那就是会导致循环依赖。循环依赖可能会直接蹦掉你的程序。

站内跳转,循环依赖及解决方法

可以看到上面链接中造成循环依赖的根本原因就是在这里 login.ts => http.ts
构成了循环依赖 store.ts => authSlice.ts => login.ts => http.ts => store.ts

所以直接在http.ts 中引入store实例的方式是错误且不科学的。

二、解决方案

http.ts 文件

import type { Appstore } from "@/redux/store";

// 读取注入的store(非组件文件)
let store: Appstore;
export const injectStore = (_store: Appstore) => {
  store = _store;
};

this.service.interceptors.request.use(
  (request: AdaptAxiosRequestConfig) => {
    const { token } = store.getState().users;
  }
);

入口文件中 main.tsx 文件

import { store } from "@/redux/store.ts";
import { injectStore } from "@/api";
// store注入axios(非react组件文件)
injectStore(store);

标签:文件,ts,React,使用,组件,redux,Reudx,store
From: https://www.cnblogs.com/wanglei1900/p/17746206.html

相关文章

  • uniapp 使用z-paging 分页组件 写在头部插槽内的单选按钮无法点击
    这个问题是因为组件层级太低<z-pagingref="paging"v-model="dataList"@query="queryList"auto-show-back-to-top:empty-view-z-index="9999"class="paging">      <viewslot="top">         <vie......
  • 界面组件DevExpress WinForms v23.1 - TreeList、UI模板全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForm 控件已正式发布v23.1版本,此版......
  • BootstrapBlazor组件库,Marquee文字滚动组件
    BootstrapBlazor组件库,Marquee文字滚动组件介绍本Blazor组件依赖于BootstrapBlazor组件库。使用该组件之前需要先安装BootstrapBlazor组件库。可以通过nuget命令行安装dotnetaddpackageBootstrapBlazor--version7.x或者双击项目名称直接添加ItemGroup<ItemGroup>......
  • VS Code开发React-Native及Flutter 开启无线局域网安卓真机调试问题
    VSCode开发React-Native及Flutter开启无线局域网安卓真机调试问题发布于 2020-10-2015:48:471.7K0举报笔者前段时间在做react-native开发,一直是有线连接安卓真机进行调试的。有线调试确实带来诸多麻烦,因为在调试过程中需要频繁和手机进行交互,导致有时候......
  • React 路由
    React路由1.ReactRouter5.x功能概述:点击切换展示区内容,并切换浏览器地址/about/homeAbout组件importReact,{Component}from'react'exportdefaultclassAboutextendsComponent{render(){return(<h3>我是About的内容</h3>......
  • 安卓开发组件开发示例
    系统原生下拉刷新<androidx.swiperefreshlayout.widget.SwipeRefreshLayoutandroid:id="@+id/swipe_refresh_layout"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:android="http://sc......
  • Spring-Boot 整合 J2EE Web组件
    一,整合Servlet1,通过注解扫描完成Servlet组件的注册1.1编写servlet/***SpringBoot整合Servlet方式一**<servlet>*<servlet-name>FirstServlet</servlet-name>*<servlet-class>com.bjsxt.servlet.FirstServlet</servlet-class>*</servlet>**<servlet-......
  • 深入了解iPhone 15 Pro内部结构和技术组件338500537、TPS6565780、338500843、SN300
    TechInsights团队正在拆解iPhone15Pro,以揭示其中的创新,包括使用台积电3nm工艺的全新A17芯片,提供了深入了解iPhone15Pro内部结构和技术组件。NXPNFC控制器安全元件SN300:(SN300VUK)Apple/Cirrus逻辑音频放大器338500537TiAMOLED显示器电源TPS6565780KIOXIA256GBNAND闪存App......
  • Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件
    Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件大家好,我是艾西有不少小伙伴非常喜欢我的世界Minecraft游戏,今天小编跟大家分享下Minecraft个人服务器怎么设置皮肤站。Minecraft皮肤站是什么?其实官网就有皮肤站,在正版用户选择正版的登录后,MC客户端就会到官方......
  • 常见的 React 知识
           ......