当前位置: 首页 > news >正文

dva的学习总结

公司的项目源码用的是react和dva,所以我必须抓紧时间学习一下dva了,一天时间,看看我学到了什么(dva官网DvaJS)[这是很久之前就打算写的了,一直没时间,一直存着草稿,今天发出来吧]

1.介绍

dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。【redux-saga】

2.安装 dva-cli

通过 npm 安装 dva-cli 并确保版本是 0.9.1 或以上。

$ npm install dva-cli -g
$ dva -v
dva-cli version 0.9.1

3. 创建新应用

dva new dva-quickstart

4. 通过 npm 安装 antd 和 babel-plugin-import 。babel-plugin-import 是用来按需加载antd 的脚本和样式的

$ npm install antd babel-plugin-import --save

编辑 .webpackrc,使 babel-plugin-import 插件生效。

{
+  "extraBabelPlugins": [
+    ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
+  ]
}

注:dva-cli 基于 roadhog 实现 build 和 dev,

5.定义路由

新建 route component routes/Products.js,内容如下:

import React from 'react';const Products = (props) => (<h2>List of Products</h2>
);export default Products;

添加路由信息到路由表,编辑 router.js :

+ import Products from './routes/Products';
...
+ <Route path="/products" exact component={Products} />

npm start 启动服务

在浏览器里打开 http://localhost:8000/#/products ,你应该能看到前面定义的 <h2> 标签

6. 编写 UI Component

随着应用的发展,你会需要在多个页面分享 UI 元素 (或在一个页面使用多次),在 dva 里你可以把这部分抽成 component 。

我们来编写一个 ProductList component,这样就能在不同的地方显示产品列表了。

新建 components/ProductList.js 文件:

import React from 'react';
import PropTypes from 'prop-types';
import { Table, Popconfirm, Button } from 'antd';const ProductList = ({ onDelete, products }) => {const columns = [{title: 'Name',dataIndex: 'name',}, {title: 'Actions',render: (text, record) => {return (<Popconfirm title="Delete?" onConfirm={() => onDelete(record.id)}><Button>Delete</Button></Popconfirm>);},}];return (<TabledataSource={products}columns={columns}/>);
};ProductList.propTypes = {onDelete: PropTypes.func.isRequired,products: PropTypes.array.isRequired,
};export default ProductList;

7. 定义 Model

完成 UI 后,现在开始处理数据和逻辑。

dva 通过 model 的概念把一个领域的模型管理起来,包含同步更新 state 的 reducers,处理异步逻辑的 effects,订阅数据源的 subscriptions 。

新建 model models/products.js :

export default {namespace: 'products',state: [],reducers: {'delete'(state, { payload: id }) {return state.filter(item => item.id !== id);},},
};

这个 model 里:

  • namespace 表示在全局 state 上的 key
  • state 是初始值,在这里是空数组
  • reducers 等同于 redux 里的 reducer,接收 action,同步更新 state

然后别忘记在 index.js 里载入他:

// 3. Model
+ app.model(require('./models/products').default);

8. connect 起来

到这里,我们已经单独完成了 model 和 component,那么他们如何串联起来呢?

dva 提供了 connect 方法。如果你熟悉 redux,这个 connect 就是 react-redux 的 connect 。

编辑 routes/Products.js,替换为以下内容:

import React from 'react';
import { connect } from 'dva';
import ProductList from '../components/ProductList';const Products = ({ dispatch, products }) => {function handleDelete(id) {dispatch({type: 'products/delete',payload: id,});}return (<div><h2>List of Products</h2><ProductList onDelete={handleDelete} products={products} /></div>);
};// export default Products;
export default connect(({ products }) => ({products,
}))(Products);

最后,我们还需要一些初始数据让这个应用 run 起来。编辑 index.js

- const app = dva();
+ const app = dva({
+   initialState: {
+     products: [
+       { name: 'dva', id: 1 },
+       { name: 'antd', id: 2 },
+     ],
+   },
+ });

 9.打包

 npm run build

相关文章:

dva的学习总结

公司的项目源码用的是react和dva&#xff0c;所以我必须抓紧时间学习一下dva了&#xff0c;一天时间&#xff0c;看看我学到了什么&#xff08;dva官网DvaJS&#xff09;[这是很久之前就打算写的了&#xff0c;一直没时间&#xff0c;一直存着草稿&#xff0c;今天发出来吧] 1…...

Docker部署.NET6项目

Docker的三大核心概念 1、docker仓库&#xff08;repository&#xff09; docker仓库&#xff08;repository&#xff09;类似于代码库&#xff0c;是docker集中存放镜像的场所。实际上&#xff0c;注册服务器是存放仓库的地方&#xff0c;其上往往存放着很多仓库。每个仓库集…...

Pandas 打开有密码的Excel

安装包 pip isntall msoffcrypto-tool msoffcrypto库的简单介绍 msoffcrypto提供了对Microsoft Office文件进行加密和解密的功能。它支持对Word、Excel和PowerPoint文件进行加密和解密操作。 msoffcrypto的原理是利用Microsoft Office文件的加密算法对文件进行加密和解密。它能…...

CCF 202104-2:邻域均值--C++

#include<iostream> #include<bits/stdc.h>using namespace std;int A[601][601]; int n;//长宽都为n个像素double FindNeighborSum(int i,int j,int r,int A[][601]) {int sum0;//像素和 int gs0;//领域 中的像素个数 for(int xi-r;x<ir;x)//找到每一个领域像素…...

基于JAVA+SpringBoot+Vue的前后端分离的医院信息智能化HIS系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着科技的不断发展&a…...

Kotlin Flow 操作符

前言 Kotlin 拥有函数式编程的能力&#xff0c;使用Kotlin开发&#xff0c;可以简化开发代码&#xff0c;层次清晰&#xff0c;利于阅读。 然而Kotlin拥有操作符很多&#xff0c;其中就包括了flow。Kotlin Flow 如此受欢迎大部分归功于其丰富、简洁的操作符&#xff0c;巧妙使…...

HarmonyOS4.0从零开始的开发教程08构建列表页面

HarmonyOS&#xff08;六&#xff09;构建列表页面 List组件和Grid组件的使用 简介 在我们常用的手机应用中&#xff0c;经常会见到一些数据列表&#xff0c;如设置页面、通讯录、商品列表等。下图中两个页面都包含列表&#xff0c;“首页”页面中包含两个网格布局&#xff…...

分布式环境下的session 共享-基于spring-session组件和Redis实现

1、问题概述 不是所有的项目都是单机模式的&#xff0c;当一个项目服务的局域比较广&#xff0c;用户体量比较大&#xff0c;数据量较大的时候&#xff0c;我们都会将项目部署到多台服务器上&#xff0c;这些个服务器都是分布在不同的区域&#xff0c;这样实现了项目的负载和并…...

docker基本管理和相关概念

docker是什么&#xff1f; docker是开源的应用容器引擎。基于go语言开发的。运行在Linux系统当中开源轻量级的“虚拟机”。 docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的&#xff0c;可移植的&#xff0c;自给自足的容器。 docker的宿主机是Linux系统…...

Linix服务器添加dns解析

Linix开通互联网域名地址出现&#xff0c;如下错误&#xff1a; 需要访问的服务器上添加dns解析 vim /etc/sysconfig/network-scripts/ifcfg-ens192 添加如下配置&#xff1a; DNS1202.96.134.13 重启网卡&#xff1a; systemctl restart network 注意如果是docker服务部署…...

llama.cpp部署(windows)

一、下载源码和模型 下载源码和模型 # 下载源码 git clone https://github.com/ggerganov/llama.cpp.git# 下载llama-7b模型 git clone https://www.modelscope.cn/skyline2006/llama-7b.git查看cmake版本&#xff1a; D:\pyworkspace\llama_cpp\llama.cpp\build>cmake --…...

STM32CubeMX+micro_ros_stm32cubemx_utils库

GitHub - micro-ROS/micro_ros_stm32cubemx_utils at humble 这个就是下载这个代码库以后的文件结构。其中sample_project.ioc就是平时STM32CubeMX的工程文件。类似于visual studio里面的项目文件 。打开以后是这个样子的&#xff1a; 可以看到跟本文后面的那些配置是几乎一模一…...

C语言有哪些预处理操作?

C语言的预处理是在编译之前对源代码进行处理的阶段&#xff0c;它主要由预处理器完成。预处理器是一个独立的程序&#xff0c;它负责对源代码进行一些文本替换和处理&#xff0c;生成经过预处理的代码。以下是C语言预处理的一些重要特性&#xff1a; 1&#xff0c;头文件包含 #…...

数据结构算法-希尔排序算法

引言 在一个普通的下午&#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐&#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。 然而&#xff0c;小明的牌就像刚从乱麻中取出来的那样&#xff0c;毫无头绪。小森的牌也像是被小丑掷…...

php使用vue.js实现省市区三级联动

参考gpt 有问题问gpt 实现效果 现省市区三级联动的方法可以使用PHP结合AJAX异步请求来实现。下面是一个简单的示例代码&#xff1a; HTML部分&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>省市区三级联动…...

软件测试:测试用例八大要素模板

一、通用测试用例八要素 1、用例编号&#xff1b; 2、测试项目&#xff1b; 3、测试标题&#xff1b; 4、重要级别&#xff1b; 5、预置条件&#xff1b; 6、测试输入&#xff1b; 7、操作步骤&#xff1b; 8、预期输出 二、具体分析通用测试用例八要素 1、用例编号 一般是数字…...

C语言进阶之路之顶峰相见篇

目录 一、学习目标 二、宏定义 预处理 宏的概念 带参宏 无值宏定义 三、条件编译 条件编译 条件编译的使用场景 四、头文件 头文件的作用 头文件的内容 头文件的基础语句&#xff1a; GCC编译器的4个编译步骤&#xff1a; 总结 一、学习目标 掌握宏定义含义和用…...

第76讲:MySQL数据库中常用的命令行工具的基本使用

文章目录 1.mysql客户端命令工具2.mysqladmin管理数据库的客户端工具3.mysqlbinlog查看数据库中的二进制日志4.mysqlshow统计数据库中的信息5.mysqldump数据库备份工具6.mysqllimport还原备份的数据7.source命令还原SQL类型的备份文件 MySQL数据库提供了很多的命令行工具&#…...

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…...

Kubernetes架构及核心部件

文章目录 1、Kubernetes集群概述1.1、概述1.2、通过声明式API即可 2、Kubernetes 集群架构2.1、Master 组件2.1.1、API Server2.1.2、集群状态存储2.1.3、控制器管理器2.1.4、调度器 2.2、Worker Node 组件2.2.1、kubelet2.2.2、容器运行时环境2.2.3、kube-proxy 2.3、图解架构…...

实时控制系统中VoU传输优化框架的设计与实践

1. 实时控制系统的网络传输挑战 在工业物联网和网络化控制系统中&#xff0c;传感器、控制器和执行器之间的实时数据传输质量直接影响整个系统的控制性能。传统控制系统通常假设通信链路是理想的——零延迟、无丢包且带宽无限。然而在实际无线多跳网络环境中&#xff0c;这种假…...

BetterGI原神自动化工具:5分钟轻松上手指南,彻底解放你的游戏时间!

BetterGI原神自动化工具&#xff1a;5分钟轻松上手指南&#xff0c;彻底解放你的游戏时间&#xff01; 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集…...

JMeter TPS真相:业务吞吐量 vs 采样均值的全栈解剖

1. 为什么TPS不是“点一下就出来的数字”&#xff0c;而是压测成败的命门刚接手公司电商大促前的压测任务时&#xff0c;我盯着JMeter报告里那个醒目的TPS&#xff08;Transactions Per Second&#xff09;数值&#xff0c;心里还觉得挺踏实——毕竟它看起来比“线程数”“响应…...

别再只盯着深度学习!用OpenCV+Python实战传统分水岭算法,5分钟搞定细胞图像分割

用OpenCVPython玩转分水岭算法&#xff1a;5分钟实现细胞图像精准分割在医学图像分析领域&#xff0c;细胞计数和分割一直是基础且关键的环节。传统深度学习方法虽然效果惊艳&#xff0c;但往往需要大量标注数据和计算资源。而分水岭算法这个诞生于1992年的经典方法&#xff0c…...

大型语言模型推理加速:Lyanna架构与推测解码优化

1. 大型语言模型推理加速的技术挑战在自然语言处理领域&#xff0c;大型语言模型(LLM)的推理速度一直是制约其实际应用的关键瓶颈。传统自回归解码方式需要逐个生成token&#xff0c;这种序列化特性使得计算资源无法得到充分利用。以LLaMA-2-7B模型为例&#xff0c;在NVIDIA A1…...

智能AI图像识别之工地积水识别数据集 道路积水数据集 管道泄漏漏水数据集 图像yolov8图像数据集 积水识别yolo第10260期

水目标检测数据集简介 水目标检测数据集核心信息表信息类别具体内容数据集类别计算机视觉领域下的目标检测类数据集&#xff0c;专注于 “水-water” 相关目标的检测任务数据数量包含 6.8k 张图像&#xff08;即 6784 张&#xff09;&#xff0c;为目标检测模型的训练、验证提供…...

ZygiskFrida:安卓逆向中基于Zygote的零感知Frida注入方案

1. 这不是“又一个 Frida 注入工具”&#xff0c;而是安卓逆向工作流的物理层重构你有没有过这样的经历&#xff1a;在一台已 root 的测试机上调试某个金融类 App&#xff0c;想 hook 它的 SSL Pinning 检查逻辑&#xff0c;结果 Frida Server 启动失败&#xff1b;换用 frida-…...

紧急预警:新课标实施倒计时90天!用PlayAI快速构建跨学科项目式学习(PBL)资源包的5步极速法

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;紧急预警&#xff1a;新课标实施倒计时90天&#xff01;用PlayAI快速构建跨学科项目式学习&#xff08;PBL&#xff09;资源包的5步极速法 距离《义务教育课程方案&#xff08;2022年版&#xff09;》全面落地…...

【Lovable高阶开发者私藏技巧】:绕过平台限制实现自定义CSS/JS注入与第三方SDK深度对接

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lovable无代码开发教程 Lovable 是一款面向业务人员与轻量级开发者的可视化应用构建平台&#xff0c;它通过拖拽式界面、逻辑编排画布和内置数据连接器&#xff0c;将复杂功能封装为可复用的模块。无需编写传统…...

仓储海量货物人车混跑,无感定位并发能力碾压UWB上限瓶颈技术白皮书方案

仓储海量货物人车混跑&#xff0c;无感定位并发能力碾压UWB上限瓶颈技术白皮书方案一、方案概述随着现代智能仓储向高密度、高周转、无人化、集约化模式快速迭代&#xff0c;立体仓储库区普遍形成海量货物堆叠、多叉车穿梭、人员高频作业、人车密集混跑的复杂动态工况。仓储作业…...