首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我使用了一个useDispatch自定义钩子,并在我的测试中得到了这个错误:操作必须是纯对象。使用自定义中间件进行异步操作

这个错误提示表明你在使用 useDispatch 自定义钩子时,传递给 dispatch 的操作(action)不是一个纯对象。在 Redux 中,操作必须是纯对象,这意味着它们应该是一个普通的 JavaScript 对象,具有 type 属性,并且其他属性应该是不可变的。

如果你需要进行异步操作,你应该使用中间件来处理这些操作。Redux 提供了几个常用的中间件,如 redux-thunkredux-saga,来处理异步操作。

以下是使用 redux-thunk 中间件的示例:

  1. 安装 redux-thunk 中间件: npm install redux-th垛
  2. 配置 Redux store 以使用 redux-thunk 中间件: import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; const store = createStore( rootReducer, applyMiddleware(thunk) );
  3. 创建一个异步操作: // actions.js export const fetchDataRequest = () => ({ type: 'FETCH_DATA_REQUEST' }); export const fetchDataSuccess = (data) => ({ type: 'FETCH_DATA_SUCCESS', payload: data }); export const fetchDataFailure = (error) => ({ type: 'FETCH_DATA_FAILURE', payload: error }); export const fetchData = () => { return (dispatch) => { dispatch(fetchDataRequest()); fetch('https://api.example.com/data') .then(response => response.json()) @then(data => dispatch(fetchDataSuccess(data))) .catch(error => dispatch(fetchDataFailure(error))); }; };
  4. 在组件中使用 useDispatch 自定义钩子: import React from 'react'; import { useDispatch } from 'react-redux'; import { fetchData } from './actions'; const MyComponent = () => { const dispatch = useDispatch(); React.useEffect(() => { dispatch(fetchData()); }, [dispatch]); return ( <div> {/* 组件内容 */} </ +div> ); }; export default MyComponent;
  5. 测试中的注意事项: 在测试中,确保你正确地模拟了 dispatch 函数和异步操作。你可以使用 redux-mock-store 来模拟 Redux store 和 dispatch 函数。 import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import { fetchData } from './actions'; const middlewares = [thunk]; const mockStore = configureMockStore(middlewares); describe('fetchData action', () => { let store; beforeEach(() => { store = mockStore({}); }); it('should dispatch the correct actions', async () => { const expectedActions = [ { type: 'FETCH_DATA_REQUEST' }, { type: 'FETCH_DATA_SUCCESS', payload: { /* mock data */ } } ]; await store.dispatch(fetchData()); expect(store.getActions()).toEqual(expectedActions); }); });

通过使用 redux-thunk 中间件,你可以处理异步操作,并确保在测试中正确地模拟和验证这些操作。

相关搜索:redux异步操作错误:操作必须是纯对象。使用自定义中间件进行异步操作redux测试操作必须是纯对象。使用自定义中间件进行异步操作单元测试:操作必须是纯对象。使用自定义中间件进行异步操作React Redux错误:操作必须是纯对象。使用自定义中间件进行异步操作Redux Toolkit:错误:操作必须是纯对象。使用自定义中间件进行异步操作未捕获的错误:操作必须是纯对象。使用自定义中间件进行异步操作错误:操作必须是纯对象。对异步操作使用自定义中间件。我做错了什么?react-redux错误:操作必须是纯对象。使用自定义中间件进行异步操作componentwillmount()未捕获错误:操作必须是纯对象。使用自定义中间件进行异步操作React/Redux...错误:操作必须是纯对象。使用自定义中间件进行异步操作Redux错误操作必须是纯对象。使用自定义中间件进行异步操作reactjs未捕获错误:操作必须是纯对象。使用自定义中间件进行异步操作错误服务器错误:操作必须是纯对象。使用自定义中间件进行异步操作即时消息收到错误:操作必须是纯对象。使用自定义中间件进行异步操作带钩子的react & redux :动作必须是纯对象。使用自定义中间件进行异步操作操作必须是纯对象。使用自定义中间件进行异步操作,但我使用的是redux-thunk可能未处理的Promise Rejection:错误:操作必须是纯对象。使用自定义中间件进行异步操作此错误消息的目的是什么?操作必须是纯对象。使用自定义中间件进行异步操作操作必须是纯对象。使用自定义中间件进行异步操作,我的商店中目前已经有Saga thunkTypeScript忽略Thunk未处理的拒绝(错误):操作必须是纯对象。使用自定义中间件进行异步操作
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

学习react-redux,看这篇文章就够啦!

例如,在一个电商系统,当用户点击购买按钮时,我们可以创建一个名为 "PURCHASE" action 来描述这个操作。...包含 actions 对象函数,不可是异步函数。但可以借助 thunk 中间件能力,在 action 函数内部执行异步操作。...在 React Redux ,如果你想在组件挂载后执行异步操作或订阅状态变化,可以使用钩子函数。...在 React Redux ,可以使用钩子函数对选择器函数进行记忆化,以避免不必要重复计算。...2、vuex 只适用于 vue 框架之中 # 设计上 1、redux redux 不可以直接修改原始 state 数据,需要拷贝原数据进行修改 不可执行异步操作,但可以通过中间件处理异步操作 2、vuex

28420
  • Redux原理分析以及使用详解(TS && JS)

    很多人认为redux必须要结合React使用,其实并不是的,Redux JavaScript 状态容器,只要你项目中使用到了状态,并且状态十分复杂,那么你就可以使用Redux管理你项目状态,它可以使用在...正因为这个action creator可以返回一个函数,那么就可以在这个函数执行一些异步操作,就比如网络请求。...,将dispatch作为函数一个参数传递进去,在函数内进行异步操作。...毕竟react- thunk对于一个项目本身而言,毫无侵入,使用极其简单,只需引入这个中间件就行了。而react- saga则要求较高,难度较大,现在也并没有掌握和实践这种异步管理方式。...从同步异步角度来说这个问题:想让异步变成类似同步操作我们应该怎么办,大家想到肯定是async/await,阻塞代码,开始一直陷入一个误区,内部的确造成了阻塞,等到data有值了,才会dispatch

    4.3K30

    美丽公主和它27个React 自定义 Hook

    ❝希望厄运忠实姐妹。——普希金 ❞ 大家好,「柒八九」。 前言 在上一篇git 原理我们在「前置知识点」随口提到了Hook。其中,就有我们比较熟悉React Hook。...❞ 如果我们从函数组件移除有状态和副作用逻辑,我们就得到了一个无状态组件。此外,有状态和副作用逻辑可以在应用程序其他地方进行重复使用。因此,尽量将它们与组件隔离开来有意义。...它返回一个带有三个属性对象: loading属性指示操作是否正在进行 error属性保存在过程遇到任何错误消息 value属性包含异步操作解析值 useAsync使用useCallback来「...使用场景 无论我们从API获取数据、执行计算还是处理表单提交,这个自定义钩子都简化了在React组件「管理异步操作」。...只需几行代码,这个钩子就会处理跟踪长按持续时间和触发相关回调函数。 使用场景 无论我们正在开发触摸敏感用户界面、实现上下文菜单或创建自定义手势,这个钩子都证明一个有价值工具。

    66820

    百度前端一面高频react面试题指南_2023-02-23

    先给出答案: 有时表现出异步,有时表现出同步 setState只在合成事件和钩子函数异步,在原生事件和setTimeout 中都是同步 setState 异步”并不是说内部由异步代码实现..., callback)callback拿到更新后结果 setState 批量更新优化也是建立在“异步”(合成事件、钩子函数)之上,在原生事件和setTimeout 不会批量更新,在“异步如果对同一个进行多次...比如你用了redux-thunk,action也可以是个函数,怎么实现这个过程,就是通过中间件这个桥梁帮你实现。...action到达store之前会走中间件这个中间件会把函数式action转化为一个对象,在传递给store redux 有什么缺点 一个组件所需要数据,必须由父组件传过来,而不能像 flux 中直接从... 保持只读状态 state只读,唯一改变state方法就是触发action,action一个用于描述以发生时间普通对象 数据改变只能通过函数来执行 使用函数来执行修改,为了描述action

    2.9K10

    用 Redux 做状态管理,真的很简单🦆!

    1.3 设计思想 Redux 既然状态管理库,那么接下来掌握一下基本数据流概念和原则 (1) 单一数据源 整个应用 全局 state 被储存在一棵对象树(object tree),并且这个对象树只存在于唯一...因此 state 只读!唯一改变 state 方法就是触发 action,action 一个用于描述已发生事件普通对象。...16.x Hooks,使用 useSelector()、useDispatch() 在任意组件消费 Store。...useSelector() 和 useDispatch() 可以在我们自定义 Counter 组件消费 counter 状态(数据) //文件位置:src/pages/counter/index.tsx...三、扩展知识 3.1 @redux/toolkit API 在上述实际案例,用到了如下 API: configureStore(): 简化 Store 创建,默认创建了执行异步中间件,自动启用

    3.4K40

    【送红宝书】JavaScript 测试系列实战(四):掌握 React Hooks 测试技巧

    但是如果一个钩子没有完善测试覆盖,我们就很难有信心去使用或者分享它。...在这篇文章,我们将体验强大 react-hooks-testing-library,学习如何去测试钩子同步和异步逻辑,并最终通过一个完整例子去了解如何结合 Redux 框架进行测试。...它参数至少调用一个 Hook 回调函数,返回值一个对象,其中我们需要关心其中 result 属性。...工作方式;act 函数同样接受一个函数执行一系列同步操作 注意 如果不使用 act 函数,而是直接将操作写在用例,Jest 会抛出警告,并且可能会遇到一些棘手边界情况。...测试异步钩子 刚才 useModalManagement 涉及到都是同步操作,然而在实际应用,很多钩子都涉及到异步操作,例如 API 数据获取等。那么我们该怎么测试这些异步钩子呢?

    2.1K00

    React?设计模式?

    CORS 浏览器实施安全功能,用于限制网页从与提供网页域不同域发出请求。"cors" 模式允许跨域请求。 「headers」: 这是一个包含你想在请求包含任何自定义标头对象。...针对上面的新需求,大家可能会扩展这个变量,让其变成一个对象,然后冗余一些变量来完成上述操作。 今天,我们分享一种另外解决方案。 我们可以通过位运算来完成这些操作。...我们现在可以将所有有状态逻辑隔离出来,并在组件中使用自定义 Hooks 进行组合或使用。因此,代码更加模块化和可测试,因为 Hooks 与组件联系较松散,可以单独测试。...我们可以使用它们将状态分类为某些操作,当执行这些操作时,可以改变分组状态。 这种模式允许使用开发人员控制组件和/或钩子状态管理,使他们能够在事件被发送时管理状态变化。...通过这样做,子组件 ref对于父组件可访问。 在创建与第三方库或应用程序一个自定义组件进行交互自定义组件时,将 forwardRef 模式包含在工作流中非常有帮助。

    26310

    前端常见react面试题合集

    进行遍历、对比等可以中断,歇一会儿接着再来。commit阶段对上一阶段获取到变化部分应用到真实DOM树一系列DOM操作。...可以使用自定义事件通信(发布订阅模式)可以通过redux等进行全局状态管理如果兄弟组件通信,可以找到这两个兄弟节点共同父节点, 结合父子间通信方式进行通信。...能暂停当前组件渲染, 当完成某件事以后再继续渲染,解决从react出生到现在都存在异步副作用」问题,而且解决优雅,使用 T异步但是同步写法,这是最好解决异步问题方式提供了一个内置函数...函数输入输出确定性 o useMemo 一个记忆函数 o useRef 返回一个可变ref对象,其Current 属性被初始化为传递参数,返回 ref 对象在组件整个生命周期内保持不变。...使用CreatePortal将组件堆栈添加到其开发警告使开发人员能够隔离bug并调试其程序,这可以清楚地说明问题所在,并更快地定位和修复错误

    2.4K30

    Taro 小程序开发大型实战(六):尝鲜微信小程序云(上篇)

    使用 Hooks 版 Redux 实现了 post 逻辑状态管理重构 如果你敲到这里,会发现我们之后内容都是前端(小程序端)逻辑,一个完整可上线小程序应用应该还要有后端,在这篇文章,我们将使用微信小程序云作为我们后台...序号4表示我们可以选中某条记录,点击右键进行删除操作 序号5表示我们可以给单个记录添加字段 序号6表示我们可以选中单个记录进行删/改操作 序号7表示我们可以查询这个集合某条记录 创建 post 记录...+剩下灰色部分,所以异步工作流程就变成了这样: view dispatch(asyncAction) 一个异步 action 来获取后端(这里小程序云)数据 saga 处理这个异步 action...登录逻辑一个 try/catch 语句,用于捕捉可能存在请求错误,在 try 代码块,我们使用了 Taro 为我们提供微信小程序云云函数 API Taro.cloud.callFunction...然后,跟着取数据一个 try/catch 语句块,用于捕获错误,在 try 语句块,我们使用 db 查询操作:db.collection('user').where().get(),表示查询 where

    2.3K20

    Zustand:让React状态管理更简单、更高效

    3、基于Hook状态管理 Zustand利用了Reacthook机制,通过创建自定义hook来访问和更新状态。这种方式与函数组件和hooks编程模型无缝集成,使得状态管理自然而流畅。...无论日志记录、持久化存储,还是异步操作中间件都可以让状态管理变得更加灵活和可扩展。 总而言之,Zustand以其轻量、简洁、灵活特性,为React项目的状态管理提供了一个高效且优雅解决方案。...(); // 使用dispatch来更新状态 }; Zustand示例 在Zustand,你可以直接创建一个store并在其中定义状态和更新状态函数。...如果在组件渲染后主题发生了变化,组件并不会自动更新以反映新主题。这是因为Zustand底层使用了ReactuseState钩子,而React状态更新异步。...解决方案:使用useEffect钩子 为了解决这个问题,我们应该使用useEffect钩子,以确保当主题改变时组件能够重新渲染: import React, { useEffect } from 'react

    1K10

    React与Redux开发实例精解

    : 单一数据源:整个应用state被存储在一棵对象,并且这个对象树只存在于唯一一个store state只读:并不代表我们无法改变state,指的是不允许直接对state这个变量重写赋值 使用函数来执行修改...函数,不要在reducer做这些事情:修改传入参数;执行有副作用操作;调用非函数 九、Action创建函数与Redux Thunk中间件 1.Redux Thunk中间件可以让action创建函数先不返回...,正是事件驱动这个特性让JS可以执行异步代码,而不会阻塞后面程序运行 2.Promise处理异步优秀方案,它不仅可以通过链式操作帮助我们摆脱回调地狱,还可以在链式操作过程任何时刻捕捉异常 3....Redux只能实现同步操作,但是可以通过Thunk中间件实现异步 十七、自定义Redux中间件 1.自定义Redux中间件只需要编写一个三层嵌套函数 2.一个异步请求通常需要编写三个action,分别在开始请求...,并在其回调中进行渲染即可 二十一、多页面下异步操作 1.redux-amrc封装了Redux重复性异步操作,只需要将Promise和key值传给redux-amrc,它会完成接下来所有异步操作

    2.1K20

    React 原理问题

    合成事件异步 钩子函数异步 原生事件同步 setTimeout同步 2、useEffect(fn, []) 和 componentDidMount 有什么差异?...虚拟dom 相当于在 JS 和真实 dom 中间加了一个缓存,利用 diff 算法避免了没有必要 dom 操作,从而提高性能。 8. 错误边界是什么?它有什么用?...类组件优化手段 1、使用组件 PureComponent 作为基类 2、使用 React.memo 高阶函数包装组件 3、使用 shouldComponentUpdate 生命周期函数来自定义渲染逻辑...什么 suspense 组件? Suspense 让组件“等待”某个异步操作,直到该异步操作结束即可渲染 17. 为什么 JSX 组件名要以大写字母开头?...数据可变性不同 Redux强调对象不可变性,不能直接操作状态对象。而是在原来状态对象基础上返回一个状态对象,最后返回应用的上一个状态 Mobx可以直接使用新值更新状态对象 4.

    2.5K00

    加速 Vue.js 开发过程工具和实践

    还有一个测试文件夹可以对这个功能进行测试。 3.使用自定义指令 Vue.js 指令我们告诉 Vue.js 为我们做某事或展示某种行为一种方式。...4.注册自定义指令和指令钩子 我们可以通过两种方式注册指令: 全局范围内: 在我们 main.js 文件。 本地: 在我们组件。 指令钩子就像在我们指令中发生特定操作时触发方法。...除了 el,永远不要修改钩子参数并确保参数只读,因为钩子参数具有本地方法对象,如果修改会导致副作用。 如有必要,使用 Vue.js 数据集在钩子之间共享信息。...当我们在 Vuex 中使用上述内容时,我们应该记住,无论发生什么,操作都应该始终提交更改。 这使我们开发工具能够跟踪更改并恢复到我们状态特定时期,并且应该在操作执行异步操作或业务逻辑。...我们可以通过传递一个反应对象来解决这个问题。 我们必须为我们用户对象分配一个计算属性。

    3K91

    阿里前端二面必会react面试题总结1

    可以使用自定义事件通信(发布订阅模式)可以通过redux等进行全局状态管理如果兄弟组件通信,可以找到这两个兄弟节点共同父节点, 结合父子间通信方式进行通信。...;自定义钩子(useXxxxx): 基于 Hooks 可以引用其它 Hooks 这个特性,我们可以编写自定义钩子,如上面的useMounted。...这种机制可以让我们改变数据流,实现如异步 action ,action 过 滤,日志输出,异常报告等功能常见中间件:redux-logger:提供日志输出;redux-thunk:处理异步操作;redux-promise...用 JavaScript 对象结构表示 DOM 树结构;然后用这个树构建一个真正 DOM 树,插到文档当中当状态变更时候,重新构造一棵新对象树。...Reactprops为什么只读?this.props组件之间沟通一个接口,原则上来讲,它只能从父组件流向子组件。React具有浓重函数式编程思想。提到函数式编程就要提一个概念:函数。

    2.7K30

    ReactReactNative 状态管理终于懂了!redux redux-toolkit 与 rematch 对比总结

    有同学反馈开发 ReactNative 应用时状态管理不是很明白,这个问题之前刚接触 React 时也遇到过,看了好多文章和视频才终于明白,不得不说,React 及三方库这方面做有点过于复杂了!...,它返回值一个 Store 对象; createSlice:管理分片全局状态函数,其返回值一个分片对象,该对象上最重要两个属性: actions:创建分片 action 函数集合...React/React Native 应用提供了 1 个组件和 2 个常用钩子函数: Provider:Provider 一个组件,该组件接收存储所有全局状态 Store 对象作为参数 Provider...() 获取所有状态,不建议 useDispatch:用于发送指令钩子函数,其返回值 dispatch 函数,而 dispatch 函数入参 action。...Redux Toolkit 最大优势在于使 Redux 应用程序代码更加简洁、精简,更容易维护。 React-Redux 提供了在使用 Redux React 应用集成方案。

    2.1K60

    百度前端一面必会vue面试题合集

    主要使用了宏任务微任务(setTimeout、promise那些),定义了一个异步方法,多次调用nextTick会将方法存入队列,通过异步方法清空当前队列。...对于Watch:它不支持缓存,数据变化时,它就会触发相应操作支持异步监听监听函数接收两个参数,第一个参数最新值,第二个变化之前值当一个属性发生变化时,就需要执行相应操作监听数据必须data...当需要在数据变化时执行异步或开销较大操作时,应该使用 watch,使用 watch 选项允许执行异步操作 ( 访问一个 API ),限制执行该操作频率,并在得到最终结果前,设置中间状态。...o vnode 虚拟节点 o oldVnode:上一个虚拟节点(更新钩子函数才有用)(2)使用场景普通DOM元素进行底层操作时候,可以使用自定义指令自定义指令用来操作DOM。...严格模式下会报错action 异步操作,可以获取数据后调用mutation 提交最终数据为什么vue组件data必须一个函数?

    1.7K50

    总结Vue 团队开发一些基本配置封装分享

    错误处理 在这里选用现如今兼容性比较好 axios ,可以说是比较好一个请求库,相比于 fetch 来说,两者各有优势,(已经开始使用 fetch )。...(例如台)问题,因此对接服务我们都自定义了一些 code 来陈述这一类错误处理。..., useServices 为 Promise 行为包裹了一层中间件,当你决定使用非常态请求时,这个 promise中间件 行为会被触发。...声明组件都会被传入到 useModels 中进行混入,混入后 Mixin 命名格式已经比较复杂了,这个时候来使用就不是当前 this.xxx ,而是统一执行 this.useDispatch 进行处理...在 created 钩子,通过调用 this.useDispatch('Admin/getDesserts') 进行数据获取,然后将 Admin.headers , Admin.mockTabData

    63720

    百度前端高频react面试题(持续更新)_2023-02-27

    如果现用现取称为非受控组件,而通过setState将输入值维护到了state,需要时再从state取出,这里数据就受到了state控制,称为受控组件。...但是在⼀定规模项⽬,上述⽅法很难进⾏异步管理,通常情况下我们会借助redux异步中间件进⾏异步处理。...时,该action函数体会自动执行 store.dispatch(action) } (2)使用redux-saga中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js...个⾮常实⽤异步flow 易测试,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等 redux-saga缺陷: 额外学习成本: redux-saga不仅在使⽤难以理解 generator...当 ref 属性被用于一个自定义类组件时,ref 对象将接收该组件已挂载实例作为他 current。 当在父组件需要访问子组件 ref 时可使用传递 Refs 或回调 Refs。

    2.3K30
    领券