react状态管理工具reduxjs/toolkit用法

博客介绍了Redux与React应用结合进行状态管理的搭建步骤。首先通过npm安装@reduxjs/toolkit,接着分别创建处理计数器模块、用户信息模块状态的文件,再创建Redux store整合模块,最后在应用入口处将store与React应用连接,并在组件中使用。

安装 npm install @reduxjs/toolkit

1.创建一个名为counterSlice.js的文件,用于处理计数器模块的状态:

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

const counterSlice = createSlice({
  name: 'counter',
  initialState: {
    value: 0,
  },
  reducers: {
    increment(state) {
      state.value += 1;
    },
    decrement(state) {
      state.value -= 1;
    },
  },
});

export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;

2.创建一个名为userSlice.js的文件,用于处理用户信息模块的状态:

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

const userSlice = createSlice({
  name: 'user',
  initialState: {
    name: '',
    age: null,
  },
  reducers: {
    setName(state, action) {
      state.name = action.payload;
    },
    setAge(state, action) {
      state.age = action.payload;
    },
  },
});

export const { setName, setAge } = userSlice.actions;
export default userSlice.reducer;

3.创建一个Redux store并将这些模块整合起来。创建一个名为store.js的文件:

import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';
import userReducer from './userSlice';

const store = configureStore({
  reducer: {
    counter: counterReducer,
    user: userReducer,
  },
});

export default store;

4.在你的应用程序的入口处,将store与React应用程序进行连接。创建一个名为App.js的文件:

import React from 'react';
import { Provider } from 'react-redux';
import store from './store';
import Counter from './Counter';
import User from './User';

function App() {
  return (
    <Provider store={store}>
      <div>
        <Counter />
        <User />
      </div>
    </Provider>
  );
}

export default App;

在组件Counter.js中使用

import { useDispatch,useSelector } from 'react-redux';
import {increment} from '../store/reducer/counterSlice'
export default function Counter() {
     const value= useSelector(state=>state.counter.value);
     const dispatch = ();
  const changeValue = ()=>{
        dispatch(increment())
    }
  return (
    <div>
        {value}
        <button onClick={changeValue}>修改value</button>
    </div>
  )
}


 

<think>好的,用户想了解@reduxjs/toolkit/query/react是什么以及如何使用。首先,我需要回忆一下Redux Toolkit的相关知识。记得Redux Toolkit(RTK)是Redux官方推荐的简化库,而RTK Query是其中的数据获取和缓存解决方案,专门处理API交互。 用户提到的@reduxjs/toolkit/query/react应该是RTK Query针对React的绑定库。需要确认它和react-redux的区别,引用中提到的区别是redux是架构模式,而RTK是工具包,包含RTK Query。所以RTK Query用于管理服务器状态,而react-redux用于连接React组件和Redux store。 接下来要解释RTK Query的作用,比如自动生成API slice、缓存管理、数据预取等。然后步骤应该包括安装、创建API服务、配置store、在组件中使用生成的hooks。 需要注意用户可能需要具体的代码示例,比如如何定义endpoints,如何注入middleware,以及如何使用useQuery和useMutation。还要提到优势,比如减少样板代码,自动缓存,TypeScript支持等。 可能用户在使用中会遇到问题,比如如何配置baseUrl,如何处理错误,如何触发重新获取数据。需要确保步骤清晰,代码正确,并引用之前的参考资料,比如引用[1]提到的创建项目模板和安装方法,以及引用[2]中关于RTK和react-redux的区别。 最后生成相关问题,覆盖RTK Query的其他功能、缓存策略、与传统Redux的区别,以及错误处理等。这样用户可以有进一步的学习方向。</think>### @reduxjs/toolkit/query/react 使用指南 #### 一、概念理解 `@reduxjs/toolkit/query/react` 是 Redux Toolkit(RTK)的扩展模块,专门用于简化 **API 数据交互** 和 **状态管理**。它通过自动生成 API 请求逻辑、缓存管理和状态更新,显著减少手动编写 Redux 代码的工作量[^1]。 #### 二、核心功能 1. **自动生成 API Slice**:通过定义 API endpoints 自动生成 Redux slice 2. **缓存策略**:支持数据自动缓存、失效和更新 3. **Hooks 支持**:为 React 组件提供 `useQuery`、`useMutation` 等 hooks 4. **预加载与乐观更新**:支持数据预加载和乐观 UI 更新 #### 三、使用步骤 ##### 1. 安装依赖 ```bash npm install @reduxjs/toolkit react-redux @reduxjs/toolkit/query/react ``` ##### 2. 创建 API 服务 ```typescript // api/userApi.ts import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' export const userApi = createApi({ reducerPath: 'userApi', baseQuery: fetchBaseQuery({ baseUrl: '/api' }), endpoints: (builder) => ({ getUsers: builder.query<User[], void>({ query: () => '/users', }), addUser: builder.mutation<void, Partial<User>>({ query: (body) => ({ url: '/users', method: 'POST', body, }), }), }), }) export const { useGetUsersQuery, useAddUserMutation } = userApi ``` ##### 3. 配置 Redux Store ```typescript // store.ts import { configureStore } from '@reduxjs/toolkit' import { userApi } from './api/userApi' export const store = configureStore({ reducer: { [userApi.reducerPath]: userApi.reducer, }, middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(userApi.middleware), }) ``` ##### 4. 在组件中使用 ```tsx // UserList.tsx import { useGetUsersQuery } from './api/userApi' const UserList = () => { const { data, error, isLoading } = useGetUsersQuery() if (isLoading) return <div>Loading...</div> if (error) return <div>Error!</div> return ( <ul> {data?.map(user => ( <li key={user.id}>{user.name}</li> ))} </ul> ) } ``` #### 四、主要优势 1. **代码简化**:相比传统 Redux 减少约 80% 的样板代码 2. **自动缓存**:默认 60 秒缓存时间(可配置) 3. **TS 支持**:完整的 TypeScript 类型推断 4. **集成 DevTools**:通过 Redux DevTools 调试 API 状态 #### 五、典型应用场景 1. 需要频繁调用 REST/GraphQL API 的 SPA 应用 2. 需要实时数据更新的 dashboard 类应用 3. 需要处理复杂缓存逻辑的电商平台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值