React Dva项目创建Model,并演示数据管理与函数调用

news2025/1/10 11:04:46

本文的话 我们讲一下定义Model
也就是Dva中redux的部分
我们打开一个刚创建的Dva项目 看到 src下的models 下 就是Model部分 这里 他给我们了一个案例
在这里插入图片描述
如果用 react-redux 管理 模块多了之后会看着比较乱 或 很麻烦
但是 大家会发现 在Model中 他将这些都放在一起了
只需要创建一个这样的文件就可以了

我们在这个models下创建一个自己的 就叫 product.js
在这里插入图片描述
然后编写代码如下

export default {
    namespace: "product",
    state: {
        productList: [
            {
                name: "小猫猫"
            },
            {
                name: "小狗狗"
            }
        ]
    },
    reducers: {
        updatelist(state,action) {
            let stateClon = deepCopy(state);
            stateClon.productList.push(action.payload);
            return stateClon;
        }
    }
}

function deepCopy(obj) {
    let str = JSON.stringify(obj);
    let appobj = JSON.parse(str);
    return appobj;
}

这里 namespace是一定要写的 相当于名字 然后 state就是我们的数据了 对掌握redux的伙伴比较好理解
reducers中写的是我们操作数据的函数 这里 我们写了一个向数组中加数据的updatelist
其中用到了一个deepCopy
这个是我们用来做深拷贝的 拷贝state
因为redux写明不建议开发者直接操作state 所以 我们先拷贝出来 然后处理好 在return回去

然后 我们看到 src下的index.js 将Model部分注释的代码解开
在这里插入图片描述
就可以看到 它引入的是我们example的例子
我们直接按他这个写法 将引用的文件改成我们自己写的product.js
在这里插入图片描述
然后 我们来试着操作这个数据

我们找一个组件编写代码如下

import React from "react"
import { connect } from "dva";

class dom extends React.Component {
  constructor(props){
    super(props);
    this.state = {
    }
  }

  getProduct = () =>{
    console.log(this.props.productList);
  }

  render(){
    return (
      <div>
         <button onClick={this.getProduct} type="primary">获取</button>
      </div>
    )
  }
}
const mapStateToProps = (state) => {
  return {
    productList: state.product
  }
}
export default connect(mapStateToProps)(dom);

首先 你要引入connect 然后声明一个函数 名字顺便 我这里直接叫 mapStateToProps 他接收一个参数state 然后定义 productList 等于 state.product
这个 state 后面点的等下就要和你Model中的product对应
这样 他就会将对应的Model给你
然后调用connect 第一个参数是获取Model的函数 第二个是组件的实体
此时 我们点击按钮获取 来看一下this.props.productList中的内容
在这里插入图片描述
可以看到 这就是我们product state的数据了
在这里插入图片描述
那么 这里 读到数据了 我们还是要来调用updatelist
我们加一个按钮

<button onClick={this.addProduct} type="primary">添加</button>

addProduct方法参考代码如下

addProduct = () => {
  this.props.dispatch({
    type: "product/updatelist",
    payload: {
      name: "新数据"
    }
  })
}

在这里插入图片描述
这里 我们调用this.props.dispatch type 就是 namespace名/方法名
在这里插入图片描述
第二个参数 就是方法接收到的action

运行代码
然后 我们先点击添加 在点击获取
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css属性

1、形状相关的 宽、高、边线&#xff08;粗细、线样式、颜色&#xff09;、弧度、前景色、背景色、透明度 圆角矩形&#xff1a; 随着radius的增加&#xff0c;角会越来越圆&#xff0c;当设置为高的一半&#xff08;高200是直径&#xff09;时&#xff0c;就会成圆角 宽高都是…

请求响应-日期时间参数的接受

日期参数 由于从前端发送的请求中&#xff0c;日期的格式可能各不相同&#xff0c;使用DateTimeFormat注解完成日期参数格式的转换具体关键代码如下&#xff1a; 在postman中发出对应请求携带对应参数结果如下&#xff1a; 参数名称要与方法中的形参名称一致&#xff0c;免得…

oracle排序问题

记录工作中遇到的问题让工作更加顺利! 文章目录 1.排序1.1数字字符串排序问题解决1.2自定义处理NULL 1.排序 工作中遇到一个需要排序的地方&#xff0c;遇到两个函数 DENSE_RANK和 RANK &#xff1b;RANK 函数是按照一个字段或值排序后返回绝对位置&#xff08;即相同值排名相…

HCIA云计算1

KVM是所有云平台的底座&#xff0c;云下面是虚拟化云台&#xff0c;虚拟化只提供基础架构&#xff0c;云可以提供服务&#xff0c;云是大杂烩。 OpenStack 开源云操作系统 KVM 开源虚拟化 Linux KVM OpenStack 大部分云厂商都是基于OpenStack 做二次开发 VRM理解成物理服务器…

推荐10个Flutter开源项目

作为跨平台应用开发的领头羊,Flutter从已发布就受到广大开发者的追捧。使用Flutter技术开发的应用不仅体验上无限接近原生应用,在开发效率上也是其他技术无法比拟的。随着其开发者社区的不断壮大,Flutter生态系统已经相当强大,并且众多开源应用程序也相继诞生。这些开源应用…

杨氏模量——从宏观(应力-应变曲线)到微观(原子键)尺度解释杨氏模量

杨氏模量&#xff08;Young’s Modulus&#xff09;是三个主要弹性常数之一&#xff0c;与剪切模量&#xff08;shear modulus&#xff09;、体积模量&#xff08;bulk modulus&#xff09;一起用于描述材料在载荷下如何变形 以下展示了拉伸试验的应力应变曲线 如果施加的应力…

3Ds max入门教程:创建雪地

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在本教程中&#xff0c;您将学习在 3ds Max 9 中制作雪地。在本教程中&#xff0c;我们将使用一些原始平面、粒子系统和纹理&#xff0c;看看您可以从中制作出多么有效和逼真的场景。 好的&#xff0c;首先…

Linux学习之变量赋值

变量的命名规则&#xff1a; 变量的名字只能由字母、数字和下划线组成。 不能以数字开头。 为变量赋值的过程&#xff0c;称为变量替换。 变量赋值的方式有以下几种&#xff1a; 变量名变量值 使用let为变量赋值 将命令赋值给变量 将命令结果赋值给变量&#xff0c;使用$()或者…

前端框架Layui实现动态树效果(书籍管理系统左侧下拉列表)

目录 一、前言 1.什么是树形菜单 2.树形菜单的使用场景 二、案例实现 1.需求分析 2.前期准备工作 ①导入依赖 ②工具类 BaseDao&#xff08;通用增删改查&#xff09; BuildTree(完成平级数据到父子级的转换) ResponseUtil&#xff08;将数据转换成json格式进行回显&…

能“出汗”,会“呼吸”的户外行走机器人

美国亚利桑那州立大学(ASU)科学家研制出了世界上第一个能像人类一样出汗、颤抖和呼吸的户外行走机器人模型。这个机器人名叫ANDI&#xff0c;是一个能模仿人类出汗的热敏“热模型”。 ANDI 身上不仅有可以使它行走的关节&#xff0c;还有其他机器人身上都没有的东西——它浑身…

高并发的哲学原理(一)-- 找出单点,进行拆分

人列计算机 《三体》中&#xff0c;刘慈欣设计了一个用人进行二进制运算的计算机&#xff0c;使用了三千万名士兵(晶体管)&#xff1a; 计算机名&#xff1a;秦一号 CPU&#xff1a;秦始皇最精锐的五个军团 挥舞旗帜进行二进制运算 用三个士兵来组成与门、或门、与非门、或非门…

Python批量实现word中查找关键字

一、背景 在日常办公和文档处理中&#xff0c;我们常常需要在大量的Word文档中查找特定的关键字&#xff0c;然后进行接下来的操作&#xff0c;比如关键字替换等。手动逐个打开并搜索文档显然是费时费力的。因此&#xff0c;利用Python编写一个批量实现Word中查找关键字的程序可…

18、气象学中风场的绘制

文章目录 前言一、批量读取数据二、绘制2022年的平均风场三、绘制每个季节的平均风场四、绘制每个月的风场 前言 数据及代码下载链接➡️&#xff1a;如何绘制自定义颜色的风场图 一、批量读取数据 import os import xarray as xrfolder_path "./" file_pattern …

22、ThreadLocal的原理和使用场景

ThreadLocal的原理 每一个thread对象均含有一个ThreadLocalMap类型的成员变量threadLocals&#xff0c;它存储本线程中所有 ThreadLocal对象及其对应的值 ThreadLocalMap 由一个个Entry对象构成 Entry继承自WeakReference<ThreadLocal<?>>&#xff0c;一个Entry…

Qt6 绘制矩形和一些字符串函数讲解

Qt6 绘制矩形和一些字符串函数讲解 【1】Qt 6 模拟C的cout输出QTextStream类简介举例 &#xff08;标准输出&#xff09; 【2】Qt 6 绘制移动的矩形事件运行效果UI界面头文件.h源文件.cpp 【1】Qt 6 模拟C的cout输出 只教方法&#xff0c;更多内容请学习官方文档 QTextStream…

使用FreeMarker自定义生成word文档

使用FreeMarker自定义生成word文档 最终生成word文档如下&#xff1a; 实现思路&#xff1a; 按照要生成的文档模板格式&#xff0c;创建一个新的word&#xff08;doc&#xff09;文档&#xff0c;将其调整成所需格式&#xff0c;然后处理其中需要动态填充的数据&#xff0…

stable diffusion如何确保每张图的面部一致?

可以使用roop插件&#xff0c;确定好脸部图片后&#xff0c;使用roop固定&#xff0c; 然后生成的所有图片都使用同一张脸。 这款插件的功能简单粗暴&#xff1a;一键换脸。 如图所示&#xff1a; 任意上传一张脸部清晰的图片&#xff0c;点击启用。 在其他提示词不变的情况下…

LoRA: 大模型快速训练的秘诀

本文是四两拨千斤&#xff0c;训练大模型的PEFT方法的最后一小节&#xff0c;感兴趣读者可以阅读完整版。 LoRA LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 核心思路是对模型参数做低秩分解&#xff0c;仅训练分解后的参数&#xff0c;模型部署也需额外保存低秩参数&…

SIP业务之BLF

BLF&#xff08;Busy Lamp Field&#xff09;是SIP应用中的一项重要业务&#xff0c;用来监视目标号码的状态&#xff0c;常用于调度、坐席监控等场景。 一、 BLF原理 BLF功能需要IP终端或话机与SIP服务器协同实现的&#xff0c;主要流程如下&#xff1a; IP话机向SIP服务器发…

如何使用 ChatGP在TTPU(张量处理单元)上训练模型的指令

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a;NSDT简石数字孪生. ChatGPT 作为您的专家助手 ChatGPT 可以帮助我们学习新的编程语言、课程、技术和技能。它已成为许多寻求改进工作流程或学习新事物的专业人士的首选工具。ChatGPT 专家助手提示可以减…