首页
学习
活动
专区
工具
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未处理的拒绝(错误):操作必须是纯对象。使用自定义中间件进行异步操作
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券