dva和UmiJs结合使用教程:effects,reducer,dispatch

dva使用

dva和UmiJs结合的官方文档:dva | UmiJS

准备工作

1.预先定义好model数据仓库信息,namespace表示model仓库名,state表示model仓库中需要用到的数据。

 const Model = {
     namespace: 'coursewareName',
     state: {
         coursewareList: [],
         total: 0,
     },

2.绑定组件(CoursewareManage)与数据仓库(coursewareName)

 const mapStatetoProps = ({ coursewareName }) => {
   return { coursewareName }
 }
 export default connect(mapStatetoProps)(CoursewareManage)

数据更新过程:

1.首先通过调用函数等操作发送dispatch请求

 const getCoursewareList = (pageSize, current, order) => {
     setIsLoading(true)
     dispatch({
         type: 'coursewareName/getCoursewareList',
         payload: {
             pageSize,
             current,
             order,
         },
         callback: () => {
             setIsLoading(false)
         },
     })
 }

2.由dispatch执行model中的effects对应的函数,在effects函数中调用service函数,通过异步方式从后端中获取到所需数据

 effects: {
     *getCoursewareList({ payload, callback }, { call, put }) {
         const res = yield call(getRemoteCoursewareList, payload)
         yield put({
             type: 'saveCoursewareList',
             payload: res,
         })
         if (callback) callback()
     },
 },

3.获取到的数据传递给reducers中的函数,通过同步方式更新model中的state数据信息

 reducers: {
     saveCoursewareList(state, { payload }) {
         //console.log('reducers:', payload)
         return {
             ...state,
             coursewareList: payload.data,
             total: payload.total,
         }
     },
 },

5.state数据更新后,由于数据已绑定组件,react会重新渲染组件ui

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
dva中,Reducer 用于处理状态的变化,它接收旧的 state 和 action,然后返回新的 state。下面是使用 dva 中的 Reducer 的示例代码: ```javascript // models/example.js export default { namespace: 'example', state: { data: [], }, reducers: { saveData(state, { payload }) { return { ...state, data: payload, }; }, updateData(state, { payload }) { const { id, newData } = payload; const newDataList = state.data.map(item => { if (item.id === id) { return { ...item, ...newData, }; } return item; }); return { ...state, data: newDataList, }; }, }, }; ``` 在上述示例中,我们定义了一个 `example` 模型,它具有一个初始状态 `state`,其中包含一个名为 `data` 的数组。然后,我们在 `reducers` 对象中定义了两个处理函数:`saveData` 和 `updateData`。 - `saveData` 函数用于存储数据。它接收一个 `payload` 参数,该参数包含要保存的新数据。通过使用对象展开运算符 `...` 来更新状态中的 `data` 数组,将其替换为新的数据。 - `updateData` 函数用于更新数据。它接收一个 `payload` 参数,该参数包含要更新的数据的 `id` 和新的数据对象 `newData`。我们使用 `map` 方法遍历状态中的 `data` 数组,找到与给定 `id` 匹配的项,并使用对象展开运算符 `...` 将新数据合并到该项中。最后,我们返回更新后的 `data` 数组。 在页面组件中,可以通过 `dispatch` 方法来触发 Reducer,并传递相应的 action。 ```javascript import React from 'react'; import { connect } from 'dva'; function ExamplePage({ dispatch, example }) { const handleSaveData = () => { const newData = ['data1', 'data2', 'data3']; dispatch({ type: 'example/saveData', payload: newData }); }; const handleUpdateData = (id, newData) => { dispatch({ type: 'example/updateData', payload: { id, newData } }); }; return ( <div> <button onClick={handleSaveData}>Save Data</button> <button onClick={() => handleUpdateData(1, { name: 'New Name' })}>Update Data</button> {example.data.map((item, index) => ( <div key={index}>{item}</div> ))} </div> ); } export default connect(({ example }) => ({ example }))(ExamplePage); ``` 在上述示例中,我们在页面组件中定义了两个按钮点击事件的处理函数:`handleSaveData` 和 `handleUpdateData`。通过调用 `dispatch` 方法并传入相应的 action,我们可以触发对应的 Reducer。 这就是在 dva 中使用 Reducer 的基本示例。你可以根据实际需求编写更复杂的 Reducer 函数来处理状态的变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值