我的 rtk 切片的初始状态未按预期保存在存储中?

2024-05-06

目前正在学习如何将 RTK 与 typescript 结合使用。我有 2 个切片,其中一个是我使用 RTK 查询制作的以获取数据(称为apiSlice.ts),另一个使用 createSlice 来处理我的待办事项应用程序的同步状态更改(称为snackbarSlice.ts).

我在 SnackbarSlice 中设置的初始状态根本没有保存到商店,在 chrome redux devtools 和 console.logged 中也进行了检查,但它们确实包含 apiSlice 相关信息,只需注意 Snackbar 相关信息即可。知道我可能做错了什么吗?我觉得我已经开始做这件事太久了。

在控制台中,我收到错误: Uncaught TypeError: Cannot read properties of undefined (reading 'isOpen') on CustomSnackbar (CustomSnackbar.tsx:12:1) ,鉴于状态对象没有 isOpen 键,这是有意义的。

下面是我的代码:

snackbarSlice.ts:

import { RootState } from "../store";

type SnackbarState = {
  content: string;
  isOpen: boolean;
};

const initialState: SnackbarState = {
  content: "",
  isOpen: false,
};

export const snackbarSlice = createSlice({
  name: "snackbar",
  initialState,
  reducers: {
    openSnackbar: (state, action: PayloadAction<string>) => {
      state.isOpen = true;
      state.content = action.payload;
    },
    closeSnackbar: (state) => {
      state.isOpen = false;
      state.content = "";
    },
  },
});

export const { openSnackbar, closeSnackbar } = snackbarSlice.actions;

export const selectIsSnackbarOpen = (state: RootState): boolean =>
  state.snackbar.isOpen;

export const selectSnackbarContent = (state: RootState): string =>
  state.snackbar.content;

export default snackbarSlice.reducer;

rootReducer.ts

import { apiSlice } from "./features/apiSlice";
import snackbarReducer from "./features/snackbarSlice";

const rootReducer = combineReducers({
  snackbar: snackbarReducer,
  [apiSlice.reducerPath]: apiSlice.reducer,
});

export default rootReducer;

store.ts

import { apiSlice } from "./features/apiSlice";
import rootReducer from "./rootReducer";

export const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(apiSlice.middleware),
});

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

索引.tsx

import { App } from "./components/app/App";
import React from "react";
import { ApiProvider } from "@reduxjs/toolkit/dist/query/react";
import { apiSlice } from "./store/features/apiSlice";
import { Provider } from "react-redux";
import { store } from "./store/store";

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <Provider store={store}>
      <ApiProvider api={apiSlice}>
        <App />
      </ApiProvider>
    </Provider>
  </React.StrictMode>
);

自定义Snackbar.tsx

import { useAppDispatch, useAppSelector } from "../../hooks/reduxHooks";
import {
  closeSnackbar,
  selectIsSnackbarOpen,
  selectSnackbarContent,
} from "../../store/features/snackbarSlice";
import styles from "./CustomSnackbar.module.css";

export const CustomSnackbar = (): ReactElement => {
  const dispatch = useAppDispatch();
  const isSnackbarOpen = useAppSelector(selectIsSnackbarOpen);
  const snackbarContent = useAppSelector(selectSnackbarContent);

  const handleClose = (): void => {
    dispatch(closeSnackbar());
  };

  return (
    <div>
      {isSnackbarOpen && (
        <div className={styles["snackbar"]}>
          <div>
            <span className={styles["snackbar-btn"]} onClick={handleClose}>
              x
            </span>
            {snackbarContent}
          </div>
        </div>
      )}
    </div>
  );
};

在任何需要打开小吃栏的文件中,我运行以下代码:ispatch(openSnackbar("An error occurred while deleting task."));

对我可能会错过什么有什么想法吗?


问题似乎是ApiProvider in index.tsx。这是多余和不必要的,因为apiSlice当它传递到时应该已经包含在商店中Provider.

API提供者 https://redux-toolkit.js.org/rtk-query/api/ApiProvider

如果您可以作为提供者使用还没有 Redux 店铺.

DANGER

将其与现有的 Redux 存储一起使用将导致它们 互相冲突。如果您已经在使用 Redux,请 请按照入门指南中所示的说明进行操作。

该应用程序正在使用最近的 Redux 上下文/提供程序,即ApiProvider并且它不包括snackbar状态/减速器。

去除ApiProvider成分。

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 rtk 切片的初始状态未按预期保存在存储中? 的相关文章

  • 将 React 构建输出合并到单个 js 文件中

    这类似于这个问题 https stackoverflow com questions 49123097 generate single physical javascript file using create react app然而 这两
  • 通过 HTML 将复杂变量传递给 javascript 的正确方法

    我试图摆脱使用 PHP 的 htmlentities 但我在这里停止了 但后来我想 我不做替换和检查特殊字符 而是只 JSON 整个对象 这提供了一个非常不受欢迎的结果 其中包含大量双引号 那么我应该怎么做呢 我应该为每个图像分配一个数字唯
  • 如何为谷歌材料条形图制作动画

    我正在反应项目中绘制反应谷歌条形图 材料图表 并且我正在尝试制作动画 我读过这种图表不支持动画 但我需要这样做 必须有任何方法可以做到这一点 我很难认为新的东西比旧的东西更糟糕 有人知道我该怎么做吗 我尝试了很多不同的方法 但没有任何效果
  • 带标签的 Material-ui 文本字段[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能告诉我如何在material ui lib中制作带有标签的文本字段 寻找这样的东西 https github com callem
  • 逻辑 && 和 || JavaScript 中的运算符

    我想进一步澄清一些事情 考虑一下 var a 42 var b abc var c null a b 42 a b abc c b abc c b null 我知道对于 运算符 如果第一个操作数的测试为真 则 表达式的结果是第一个操作数 a
  • 将对象传递给jquery中的回调函数

    我最近正在开发小型聊天模块 该模块需要不断检查服务器是否有新消息 我正在向服务器发送 ajax 请求 服务器将保持连接 直到找到新消息 长轮询 Code var chatController function other variable
  • 我可以在 Express POST 请求中进行 DOM 操作吗?

    我正在使用基本的 HTML CSS 前端 目前有一个登陆页面 上面有一个表单 可将 一些数据发送到数据库 当请求完成后 它期待某种响应 在这种情况下 我正在重新渲染页面 但是 我想用某种感谢消息替换表单 以便用户知道它已正确发送 我尝试过简
  • Ionic 和 Angular 2 - 拒绝应用“http://localhost:8100/build/main.css”中的样式,因为其 MIME 类型(“text/html”)不受支持

    My Ionic https en wikipedia org wiki Ionic mobile app framework 构建一直运行得很好 直到我想在我的 iPhone 上进行测试 所以我停止了我的服务器 做了一个ionic ser
  • 在 Javascript 中按日期对数组进行排序

    我在用着sort 按日期排序数组 elements data sort function a b return a date getTime b date getTime 问题是某些元素缺少日期 或日期无效 这导致了这个错误 无法读取属性
  • 从右到左的语言和编程问题

    我正在创建一个网络文本编辑器 它使用我创建的新语言 如 BBcode 这种标记语言将采用阿拉伯语 但我面临这些问题 在所有 IDE 和编辑器中将英语和阿拉伯语文本混合在同一行中确实很困难 因为会发生奇怪的事情 单词和字符的顺序发生变化 使用
  • 如何使用startsWith过滤并获取每个对象键的值?

    我试图通过获取每个键来过滤对象checkpoint并输出其值 目前 我只能输出键而不是值 下面 我有一个简单的对象 我正在使用过滤器和startsWith 我怎样才能得到这些值呢 var data practicals 0 checkpoi
  • RegEx 使用 match() 在 JavaScript 中提取字符串数组

    我正在尝试使用string match 在 javascript 中使用正则表达式来提取字符串数组 这是一个示例字符串 CREATE TABLE listings listing id INTEGER UNIQUE state TEXT t
  • WebRTC、getDisplayMedia() 不捕获远程流中的声音

    我有一个自己的网络应用程序 它基于peerjs库 它是一个视频会议 我正在尝试使用 MediaRecorder 进行录制 但我遇到了一个非常不愉快的情况 捕获我的桌面流的代码如下 let chooseScreen document quer
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • Mocha 测试对原生 ES6 模块的“esm”支持

    有一个很棒的帖子 使用 Mocha 和 esm 测试原生 ES 模块 https web archive org web 20220318155753 https alxgbsn co uk 2019 02 22 testing nativ
  • 传单地图显示为灰色

    我正在启动 leaflet js快速开始 http leafletjs com examples quick start html但我的地图显示为灰色 我缺少什么吗 脚本 js var leafletMap L map leafletMap
  • 为什么 useState 会导致组件在每次更新时渲染两次?

    我这里有一段简单的代码 import React useState from react import styles css export default function App const number setNumber useSta
  • 如何获取元素相对于当前屏幕位置的偏移量?

    我正在尝试用纯 Javascript 重构所有 jQuery 除了非常具体的值之外 一切都正常工作 根据此代码的浏览器供应商 我得到了不同的值 对于 jQuery 我会使用 var topSelected figure offset top
  • 尝试将 jquery 加载到 tampermonkey 脚本中

    我正在编写一个脚本 在加载登录页面时登录到我的大学网络 代码如下 UserScript name My Fancy New Userscript namespace http use i E your homepage version 0
  • 如何在 React Native 中做最后一个子选择器?

    我使用Scrollview 里面有3个视图 我在它们之间留了一个间隙 例如 marginRight 5 但我不希望在最后一个视图中出现这种间隙 这就是为什么我需要这种东西 你能帮助我吗 应用这个你就可以实现你在寻找什么 const styl

随机推荐

  • Web API + OData - PATCH 请求 400 错误

    我有一个链接到 Web Api 2 OData 控制器的 Kendo UI 数据源 并且在更新操作时遇到问题 我可以很好地创建和删除 当我在进行任何更新后调用将数据源同步到服务器时 我收到 400 错误 odata error code m
  • 如何检测链接是否有效?

    我需要知道链接是否会打开 See 马克西米利安 霍夫曼的回答 https stackoverflow com a 29525678 1445366以获得更强大的解决方案 像这样的方法很常见 劫持超时以重定向到不同的 URL 这种方法对你有用
  • Google+集成:无法加载可见圈子

    我想在我的应用程序中从 google plus 获取人员信息列表 朋友个人资料图像 URL 可见名称和 ID Here s 官方 google plus 集成教程 https developers google com mobile and
  • 在 Shiny 的压缩文件夹中下载多个 csv 文件

    有人可以指出我如何使这个下载 zip 功能在 server R 中工作吗 当我运行这个时 我收到以下错误 1 var folders 00 1dk1r000h01000cxqpysvccm005p87 T Rtmps3T6Ua write
  • iOS:获取 iPhone 密码以生成用于加密的对称密钥

    我正在开发一个 iOS 应用程序 该应用程序分发到所有用密码锁定的设备 有没有办法获取设备密码 或其某种形式 来动态生成对称密钥 例如使用 PBKDF2 来加密 解密数据 否 没有 API 可以确定是否设置了设备密码或获取密码 如果已设置
  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • 防止在 Windows 资源管理器中打开重复的文件夹或子文件夹

    我正在使用下面的代码打开特定文件夹 我需要在打开之前检查一下 如果是的话文件夹或子文件夹是否已在 Windows 资源管理器中打开 以防止重复 感谢任何有用的评论和答案 Sub Prevent opening duplicate folde
  • ioc 和依赖注入之间的区别

    ioc 和依赖注入之间的区别 解释一下 spring 中的依赖注入 JSF 依赖注入和 spring 依赖注入有什么区别 IoC 的意思是控制反转 让我们看一些 强耦合代码 MyComponent 依赖于 Logger public cla
  • 需要对 mongodb 中的数组对象值求和

    如果该值存在 我正在尝试计算总价值 但查询并不能 100 工作 那么有人可以帮我解决这个问题吗 这是我的示例文档 我附上了两份文件 请提供这些文件并找出最佳解决方案 文件 1 id 1 message count 4 messages da
  • MPMoviePlayerController 添加自定义播放按钮

    目前我正在开发一个显示视频的 iPhone 应用程序 我使用 MPMoviePlayerController 从本地文件夹加载视频 我们可以定制标准媒体播放器吗 我想要做的是隐藏所有标准元素 播放 前进 倒带 完成 并仅使用带有自定义图像的
  • 包 javax.comm 不存在[重复]

    这个问题在这里已经有答案了 可能的重复 如何获取javax comm API https stackoverflow com questions 7562565 how to get javax comm api 我已经下载并安装了jdk1
  • 无法安装组件:模板或渲染函数未定义。组件导入失败

    我正在尝试复制 vue 教程示例 在这里找到 https v3 vuejs org guide component basics html passing data to child components with props https
  • Sails.js 中的子域路由

    我试图找出一种在 Sails js 中以完全动态的方式路由子域的方法 默认路由似乎不允许这样做 例如 如果用户访问 yourname example com 则路由会将其读取为 example com users theirname 并且子
  • 应用程序注册失败,因为文件位于网络共享上。注册包之前将文件复制到本地计算机

    我使用这些示例来构建 Windows 8 应用程序 http code msdn microsoft com windowsapps Getting started with C and 41e15af5 http code msdn mi
  • 在 HTML 中设置 LI 标记的值

    我有一个有序列表 我需要为其设置 值 就像是 ol li apple li li pear li li car li ol 这样它们就会显示我分配的数字 34 apple 45 pear 55 car 有没有办法告诉 LI 应显示什么数字
  • 无法使用服务帐户查询 Google Search Console API

    我需要使用服务帐户从 Google Search Console 网站管理员工具 检索一些数据 到目前为止我已经能够检索到access token对于我需要附加到请求的 url 的服务帐户 问题是我找不到办法这样做 这是我正在使用的代码 f
  • C# 和泛型 - 为什么调用基类中的方法而不是派生类中的新方法?

    如果泛型类型参数 调用类或调用方法的 受以下约束where T Base不会调用 T Derived 中的新方法 而是调用 Base 中的方法 为什么类型 T 在方法调用中被忽略 即使它应该在运行时之前已知 Update 但是 当约束使用像
  • 自定义字体,eot,不起作用

    我无法让我的自定义字体在 IE7 和 IE8 中工作 http i creative dk iJob http i creative dk iJob 它在 IE9 Firefox 和 Chrome 中运行良好 对于 Firefox 和 Ch
  • 每当调用 malloc/free 时输出到 stderr

    使用 Linux GCC C 每当调用 malloc free new delete 时 我想向 stderr 记录一些内容 我试图了解库的内存分配 因此我想在运行单元测试时生成此输出 我使用 valgrind 进行内存泄漏检测 但我找不到
  • 我的 rtk 切片的初始状态未按预期保存在存储中?

    目前正在学习如何将 RTK 与 typescript 结合使用 我有 2 个切片 其中一个是我使用 RTK 查询制作的以获取数据 称为apiSlice ts 另一个使用 createSlice 来处理我的待办事项应用程序的同步状态更改 称为