user.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {createSlice} from '@reduxjs/toolkit';
  2. const userSlice = createSlice({
  3. // name:给action对象中的type属性指定命名
  4. name: 'user1',
  5. // initialState:指定初始状态值
  6. initialState: {
  7. name:'胡图图',
  8. age: 3,
  9. address: '翻斗花园'
  10. },
  11. // 方法:存放该切片中定义的各种修改状态的reducer函数
  12. reducers: {
  13. setName(state,{payload}) {
  14. // console.log(state,action)
  15. // state.name = action.payload;
  16. state.name = payload;
  17. },
  18. setAge(state,{payload}) {
  19. state.age+=payload
  20. }
  21. }
  22. })
  23. export default userSlice.reducer;
  24. // 在slice对象中 有一个actions属性 类型是对象
  25. // 存储所有reducer函数中的对象构建的方法
  26. export const {setName,setAge} = userSlice.actions;
  27. /**
  28. * Redux原生不支持一步处理机制
  29. * 需要通过一些中间件去完成
  30. * RTK中内置了Thunk中间件可以完成一步任务处理
  31. * 在UI组件调用dispatch时,可以传入一个Action对象,
  32. * 还可以传入一个thunk函数
  33. * 继而处理异步任务,处理后 在通过dispatch中的action去修改状态
  34. *
  35. *
  36. * 什么是Thunk函数?
  37. * 1.可以是普通函数,也可以是async函数
  38. * 2.函数会接受两个参数:dispatch 和 getStaåååe 函数
  39. * 3.dispatch:用来异步处理后,执行状态修改
  40. * 4.getState:获取完整的store中的状态对象
  41. */
  42. // export function asyncSetAge(age) {
  43. // return (dispatch,getState) => {
  44. // setTimeout(()=>{
  45. // dispatch(setAge(age))
  46. // },2000)
  47. // }
  48. // }
  49. export const asyncSetAge = (age) => (dispatch,getState) => {
  50. setTimeout(()=>{
  51. dispatch(setAge(age))
  52. },3000)
  53. }