umi中@umijs/plugin-dva的使用

  • 首先创建models文件夹
  • 然后在models文件夹写以下代码
  • 在.umirc.ts进行开启
  • 在其他组件进行使用
  • 如何实现增删改的一个效果

首先创建models文件夹

符合以下规则的文件会被认为是 model 文件:

  • src/models 下的文件
  • src/pages 下,子目录中 models 目录下的文件
  • src/pages 下,所有model.ts 文件(不区分任何字母大小写)

然后在models文件夹写以下代码

import { Effect, ImmerReducer, Reducer, Subscription } from 'umi';export interface IndexModelState {name: string;
}export interface IndexModelType {namespace: 'index';state: IndexModelState;effects: {query: Effect;};reducers: {save: Reducer<IndexModelState>;// 启用 immer 之后// save: ImmerReducer<IndexModelState>;};subscriptions: { setup: Subscription };
}const IndexModel: IndexModelType = {namespace: 'index',state: {name: '',},effects: {*query({ payload }, { call, put }) {},},reducers: {save(state, action) {return {...state,...action.payload,};},// 启用 immer 之后// save(state, action) {//   state.name = action.payload;// },},subscriptions: {setup({ dispatch, history }) {return history.listen(({ pathname }) => {if (pathname === '/') {dispatch({type: 'query',});}});},},
};export default IndexModel;

在.umirc.ts进行开启

dva: {immer: true,
}

在其他组件进行使用

import React from 'react';
import { IndexModelState, ConnectRC, Loading, connect } from 'umi';interface PageProps {index: IndexModelState;loading: boolean;
}const IndexPage: ConnectRC<PageProps> = ({ index, dispatch }) => {const { name } = index;return <div>Hello {name}</div>;
};export default connect(({ index, loading }: { index: IndexModelState; loading: Loading }) => ({index,loading: loading.models.index,}),
)(IndexPage);

如何实现增删改的一个效果

models.ts文件中写以下代码

import { Effect, ImmerReducer, Reducer, Subscription } from 'umi';
const IndexModel: IndexModelType = {namespace: 'index',state: {todolist: [{id: 1,name: "蜘蛛侠",age: 18,},{id: 2,name: "钢铁侠",age: 18,},{id: 3,name: "蝙蝠侠",age: 18,}],},effects: {*query({ payload }, { call, put }) { },},reducers: {// 启用 immer 之后save(state, action) {return {...state,...action.payload,};},pushtodolist(state, action) {// console.log(state, action);state.todolist.push(action.action)// return {//     ...state,//     ...action.payload,// };},deletetodolist(state, action) {state.todolist = state.todolist.filter((res, index) => {return res.id != action.action})},edittodolistdata(state, action) {state.todolist = state.todolist.filter((res, index) => {if (res.id == action.action.id) {res.name = action.action.name}return res})}},subscriptions: {setup({ dispatch, history }) {return history.listen(({ pathname }) => {if (pathname === '/') {dispatch({type: 'query',});}});},},
};export default IndexModel;

组价文件中写以下代码

import React, { useState } from 'react'
import { connect } from "umi"
function Index(props: any) {// 添加function pushtodolist(event: any) {if (event.keyCode == 13) {let obj: any = {id: Date.now(),name: event.target.value,}// console.log(obj);props.dispatch({type: "index/pushtodolist",action: obj})}}// 删除function deletetodolist(id: any) {props.dispatch({type: "index/deletetodolist",action: id})}// 控制修改变成input的弹出框const [editinput, seteditinput] = useState()// 修改function edittodolist(data: any) {console.log(data);seteditinput(data.id)seteditinputafter(data.name)}function edittodolistdata(id: any) {seteditinput("")let obj ={id:id,name:editinputafter}props.dispatch({type: "index/edittodolistdata",action: obj})}// 控制修改之后的值const [editinputafter, seteditinputafter] = useState("")function onchangetodolist(e: any) {seteditinputafter(e.target.value)}return (<div><input type="text" onKeyDown={pushtodolist} />{props.todolist123.map((res: any) => {return <div key={res.id}>{res.name}<button onClick={() => { deletetodolist(res.id) }}>删除</button><button style={{ display: editinput == res.id ? "none" : "" }} onClick={() => { edittodolist(res) }}>修改</button><button style={{ display: editinput == res.id ? "" : "none" }} onClick={() => { edittodolistdata(res.id) }}>确定</button><input style={{ display: editinput == res.id ? "" : "none" }} type="text" defaultValue={res.name} onChange={onchangetodolist} /></div>})}</div >)
}export default connect((state: any) => {return {todolist123: state.index.todolist}
},
)(Index);

umi中@umijs/plugin-dva的使用,及实现一套增删改相关推荐

  1. OA中项目关系,实体设计,映射实体,增删改查

    =============== 步骤 ================ 1,充分了解需求(包括所有的细节):分析页面等. 2,设计实体/表  正向工程:设计实体 --> 建表(推荐):设计实体 ...

  2. java中的数组增删查改操作,java数组实现增删改查

    java 实现动态数组,Java工具类Arrays中不得不知的常用方法,数组实现队列java,java数组实现增删改查 java 增删改查代码 import java.sql.Connection; ...

  3. python中的切片能否修改元祖_Python列表的增删改查和元祖

    一.定义列表 1.names = ['mike','mark','candice','laular'] #定义列表 2.num_list = list(range(1,10)) #range生成1-1 ...

  4. python中系列的含义_python中四种组合数据类型的含义、声明、增删改查,遍历

    一.列表 列表:list 可以存储多个有顺序的可以重复的数据的类型 其他语言:数据:python中~提供的是列表[不说数组] 列表:操作数据:增加.删除.修改.查询 [CRUD] append/ins ...

  5. 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...

  6. java中ArrayList用法详解,基本用法(含增删改查)

    1.什么是ArrayList  ArrayList就是 动态数组,它提供了 ①动态的增加和减少元素  ②实现了ICollection和IList接口 ③灵活的设置数组的大小 ArrayList是一个其 ...

  7. Django框架(4.django中进入项目的shell之后对数据表进行增删改查的操作)

    django设计模型类.模型类生成表.ORM框架简介:https://blog.csdn.net/wei18791957243/article/details/88657270 数据操作 完成数据表的 ...

  8. Python中用户管理(用户的登陆、用户的增删改查)

    一.用户登陆 题目要求: 1.系统里面有多个用户,用户的信息目前保存在列表里面 users = ['root','westos'] passwd = ['123','456'] 2.用户登陆(判断用户 ...

  9. 使用umi快速搭建项目以及如何在umi中使用dva进行状态管理

    一.创建umi应用 1.新建umi应用并启动 mkdir umi && cd umi yarn create @umijs/umi-app yarn yarn start 2.umi应 ...

最新文章

  1. hyper-v创建虚拟服务器,使用 Hyper-V 创建虚拟机
  2. Linux下编译build的命令,【linux基础】20、内核的编译
  3. linux shell脚本判断文件行数,判断文件是否存在的shell脚本代码
  4. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
  5. jQuery: 插件开发模式详解 $.extend(), $.fn, $.widget()
  6. C++头文件预编译与命名空间使用方法
  7. charles抓包https/模拟弱网/设置断点/修改接口请求值或返回值/压测
  8. 开源磁盘加密软件VeraCrypt教程
  9. Spring源码解析(一)下载及编译(版本5.2.x)
  10. 闪迪u盘量产工具U盘正常显示但是多出几个空分区的解决方案
  11. 操作系统OS-采用分段式存储管理不会产生内部碎片
  12. elasticsearch查看版本号
  13. Sql递归(用with 实现递归查询)
  14. 调用app出现This app is not allowed to query for scheme...
  15. 开源项目管理软件排名_2015年排名前5位的开源项目管理工具
  16. 计算机储存文档丢失怎么找,电脑文件丢失如何找回,文件数据丢失恢复方法
  17. CVTE 2021 春招面经
  18. TensorFlow实践(16)——tf.enable_eager_execution方法
  19. Google、苹果、亚马逊向“自动驾驶”发起进攻
  20. 基于多目标灰狼算法的冷热电综合三联供微网低碳经济

热门文章

  1. 程序员接私活的10个平台和一些建议,别掉坑里去了
  2. 5G mMTC场景下NB-IoT / eMTC增强技术
  3. 个人工作邮箱怎么申请?工作邮箱有哪些?
  4. android 有关毫秒转时间的方法,及时间间隔等
  5. Datastage性能优化
  6. mysql limit括号_MYSQL中LIMIT使用简介
  7. Android GMS认证项总结
  8. Linux下使用AppImageLauncher安装AppImage文件
  9. SDUT-2933-人活着系列之Streetlights (Kruskal)
  10. Linux 系统管理(上部分)测试题