React redux toolkit RTK

发布于 2025-01-19 03:57:15 字数 2092 浏览 3 评论 0

在 react 中使用 redux,官方要求安装两个其他插件: Redux Toolkitreact-redux

安装: npm install react-redux @reduxjs/toolkit -S

image-20240128133421972

1. 用 RTK 创建 store

store/index.js

import { createSlice } from '@reduxjs/toolkit';
// createSlice 创建 reducer 的切片
// 它需要一个配置对象作为参数,通过对象的不同属性来指定它的配置
const stuSlice = createSlice({
  name: 'stu', // 用来自动生成 action 中的 type
  initialState: { // state 的初始值
    name: 'xx',
    age: 18,
  },
  reducers: { // 指定 state 的各种操作
    setName(state, action) {
      state.name = action.payload;
    }
  }
});

// 切片对象会自动的帮我们生成 action
// actions 中存储的是 slice 自动生成 action 创建器(函数) ,调用函数后会自动生成 action 对象
export const { setName } = stuSlice.actions;
const nameAction = setName('哈哈');
console.log(nameAction) // { type: name/函数名,payload: 函数的参数 }

// 创建 store
const store = configureStore({
  reducer: {
    student: stuSlice.reducer
  }
})

export default store;

2. 为 React 注入 store

index.js

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

const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
  /*注入*/
    <Provider store={store}>
      <App />
  </Provider>
)

3. React 组件使用 store 中的数据

useSelector 钩子函数的作用 是把 store 中的数据映射到组件中

useDispatch 函数的作用是生成提交 action 对象的 dispatch 函数

App.js

import { useSelector, useDispatch } from "react-redux";
import { setName } from './store'
const App = () => {
  // useSelector 用来加载 state 中的数据
  const student = useSelector(state => state.student);
  const dispatch = useDispatch();
  const setName = () => {
    dispatch(setName('张三'));
    // 或者
    dispatch({ type: 'stu/setName', payload: '张三' })
  }
  return (<div onClick={setName}>{student}</div>)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
25 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文