5.8 react状态管理

react 模块化样式与状态管理

  • 状态管理 redux redux-toolkit

  • 模块化样式

1.状态管理库 redux redux-toolkit

安装

复制代码
  pnpm install @reduxjs/toolkit react-redux

乱传,整个项目 进行数据的共享

  • 创建状态的模块文件 store/userSlice.jsx
复制代码
  // 只是 用户模块的共享数据的Slice 
  ​
  import { createSlice } from '@reduxjs/toolkit'
  ​
  // 整个模块暴露给store仓库 进行配置使用
  export const userSlice = createSlice({
          name:'user',
          // 数据
          initialState:{
              num:1000,
              userInfo:{
                  id:1000,
                  name:'John',
                  email:'john@gmail.com',
                  tell:'16231565844',
                  nickName:'葬爱家族',
                  address:'中国北京'
              }
          },
          // 方法
          reducers:{
              changeUserInfo(state,{payload}){
                  state.userInfo = {...payload}
              },
              // 页面传递给修改方法的数据  放在了 {type:'xxx',payload:页面传递实参} 中的payload中
              changeUserInfoTell(state,{payload}){
                  state.userInfo.tell = payload
              }
          }
  })
  ​
  // 将所有的修改方法 暴露给页面 进行使用
  export const {changeUserInfo,changeUserInfoTell} = userSlice.actions
  ​

2.创建 整个仓库的配置文件 store/index.jsx

复制代码
  
  // 整个store仓库的配置文件 
  import {  configureStore } from '@reduxjs/toolkit'
  import {userSlice} from './userSclie'
  ​
  const store = configureStore({
      reducer:{
          // 模块化
          // user: userReducer
          userSlice:userSlice.reducer
      }
  })
  ​
  // 将store仓库整体配置暴露给main.jsx  全局注入使用(整个项目生效)
  export default store;

3.全局注入 store配置 main.jsx

复制代码
  
  ​
  import { createRoot } from 'react-dom/client'
  import './index.css'
  import App from './App.jsx'
  // 全局注入store  redux toolkit
  import {Provider} from 'react-redux'
  import  store from './store'
  createRoot(document.getElementById('root')).render(
   <Provider store={store}>
      <App /> 
   </Provider>
     
  )
  ​

4.页面使用 获取数据useSelector 修改数据 useDispatch

复制代码
  
  ​
  import { createRoot } from 'react-dom/client'
  import './index.css'
  import App from './App.jsx'
  // 全局注入store  redux toolkit
  import {Provider} from 'react-redux'
  import  store from './store'
  createRoot(document.getElementById('root')).render(
   <Provider store={store}>
      <App /> 
   </Provider>
     
  )
  ​

2.模块化CSS 有作用域的CSS

在react 中所有的 样式文件 写的样式 默认都是 全局样式

  • 修改less 文件后缀
复制代码
  
  index.modules.less 
复制代码
  .login{
      width: 100%;
      height: 100%;
      background-color: #2d3a4b;
      display: flex;
      justify-content: center;
      align-items: center;
  ​
  }
  .form-box{
      width: 400px;
  }
  • 页面使用
复制代码
  
  import style from './index.module.less'
复制代码
  
    <div className={style.login}>
          <div className={style['form-box']}>

​ : TS 5-10

相关推荐
jktantan31 分钟前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
echome8881 小时前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
#麻辣小龙虾#2 小时前
网页布局css中flex+margin的组合布局技巧
开发语言·前端·javascript
Hello.Reader3 小时前
Three.js / Cesium 卡顿怎么办?把三维渲染搬到 GPU 服务器
服务器·开发语言·javascript
chi11303 小时前
【无标题】
前端·javascript·python
萝卜兔0084 小时前
PIKACHU_UnsafeFileUpload
javascript·php
Highcharts.js4 小时前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
程序员大阳16 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系
香芋芋圆20 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
晗夜未央1 天前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript