react+ant design pro+dva项目阶段型总结(不定时更新)

2023-11-05

1.如果你熟悉 HTML,那么 JSX 对于你来说是没有任何压力的,因为 HTML 中的所有标签,在 JSX 中都是支持的,基本上没有学习成本,只有如下几点略微的不同:
class 属性变为 className
tabindex 属性变为 tabIndex
for 属性变为 htmlFor
textarea 的值通过需要通过 value 属性来指定
style 属性的值接收一个对象,css 的属性变为驼峰写法,如:backgroundColor。
2.需要注意,不管那种方式,组件的名称首字母必须为大写。严格来说,是 JSX 要求用户自定义的组件名首字母必须为大写
3.属性必须为只读的,这一点非常重要,请严格遵守。对应到上面说到的,如果把组件理解为一个函数,那么这个函数必须为一个纯函数(Pure function),在纯函数中不能修改其参数,确定的输入必须有确定的输出。
虽然有些时候,你修改了组件的属性,貌似也能正常工作。没错,因为 JavaScript 语言特性的原因,没人能阻止你这么做。但是请先相信我,严格遵守这条规则不仅能让你少踩很多坑,而且能让你的应用稳定性更强、维护性更强。如果你直接修改组件的属性,React 并不会感知到此修改,从而不会重新渲染组件,就导致了当前组件的视图展示与数据不一致。
4.React 提供了相应的机制可以设置组件属性的默认值,如下所示,你需要通过组件的静态字段 defaultProps 来设置组件属性的默认值。如下所示:
import React, {Component} from ‘react’;
class HelloMessage extends Component {
render() {
return

Hello { this.props.name}.
;
}
}HelloMessage.defaultProps = {
name: ‘World’
}
这样就可以了, 这样不为组件设置任何属性,那么它就会在页面上展示Hello World.。
5.我期望其 name 属性只能是字符串类型的,你要是给我一个 Object,我是没法正确展示的。为了在开发过程中尽快的发现这类问题,React 为组件添加了类型检查的机制,你需要给组件设置静态字段 propTypes 来设置组件各个属性的类型检查器。
import React, {Component} from ‘react’;
import PropTypes from ‘prop-types’;
class HelloMessage extends Component {
render() {
return
Hello { this.props.name}.
;
}
}HelloMessage.defaultProps = {
name: ‘World’
}HelloMessage.propTypes = {
name: PropTypes.string
}
6.下面是 React 提供的可用的数据类型检查器。
PropTypes.array
PropTypes.bool
PropTypes.func
PropTypes.number
PropTypes.object
PropTypes.string
PropTypes.symbol
PropTypes.element 元素,其实就是 JSX 表达式,上一篇文章有说过 JSX 是 React.createElement 的语法糖,一个 JSX 表达式实际上会生成一个 JS 对象,在 React 中称之为元素(Element)。
PropTypes.node 所有可以被渲染的数据类型,包括:数值, 字符串, 元素或者这些类型的数组。
PropTypes.instanceOf(Message) 某个类的实例
PropTypes.oneOf([‘News’, ‘Photos’]) 枚举,属性值必须为其中的某一个值。
PropTypes.oneOfType([PropTypes.string, PropTypes.number]) 类型枚举,属性必须为其中某一个类型。
PropTypes.arrayOf(PropTypes.number) 属性为一个数组,且数组中的元素必须符合指定类型。
PropTypes.objectOf(PropTypes.number) 属性为一个对象,且对象中的各个字段的值必须符合指定类型。
PropTypes.any 任何类型
如果你想指定某些属性为必需属性,你可以链式调动其 isRequired 来标识某个属性对于当前组件来说是必需的。
7.设置组件的属性值
属性的值可以用一对大括号 { } 来包围,其中可以指定任意的 JavaScript 表达式。如下所示:
return (
<User
name=“Tom” // 字符串
age={18} // 数值
isActivated={true} // 布尔值
interests={[‘basketball’, ‘music’]} // 数组
address={{ city: ‘Beijing’, road: ‘BeiWuHuan’ }} // 对象
/>
)
8.ReactDOM.render 在一个单页面 web 应用中通常只调用一次。
组件可以通过 setState 改变内部状态 state 来更新视图。
setState 多数情况下是异步的。
不要直接使用当前 state 的值生成下一个 state。
不要直接通过 this.state 修改 state。

9.扩展运算符
扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值
var foo = function(a, b, c) {
console.log(a);
console.log(b);
console.log©;
}
var arr = [1, 2, 3];
//传统写法
foo(arr[0], arr[1], arr[2]);
//使用扩展运算符foo(…arr);//1
//2
//3

ES6 yield
一、介绍
  yield 关键字用来暂停和继续一个生成器函数。我们可以在需要的时候控制函数的运行。
  yield 关键字使生成器函数暂停执行,并返回跟在它后面的表达式的当前值。与return类似,但是可以使用next方法让生成器函数继续执行函数yield后面内容,直到遇到yield暂停或return返回或函数执行结束。
二、使用
函数返回对象包括value和done。其中value值是yield后面表达式值或return后面表达式值。done用于表示函数运行
function* ge() { //声明时需要添加*,普通函数内部不能使用yield关键字,否则会出错
yield ‘1’;
yield ‘2’;
yield ‘3’;
return ‘4’;
}

var a = ge(); //调用函数后不会运行,而是返回指向函数内部状态的指针
a.next(); // { value: ‘1’, done: false } 遇到yield暂停
a.next(); // { value: ‘2’, done: false }
a.next(); // { value: ‘3’, done: false }
a.next(); // { value: ‘4’, done: true} 函数执行完毕,返回done
a.next(); // { value: undefined, done: true} 已经执行完毕,返回undefined
如果next没有带有参数true,yield不能返回值,返回undefined;next函数带有参数true,即.next(true)时,那么yield就可以返回表达式的值,用于赋值。如果next带有其他参数,那么它就会将当前yield返回值置为该参数。如:
var i = yield 1; // 将1赋值给i
三、for…of
for…of循环可以自动遍历Generator函数时生成的Iterator对象。
function* ge() {
yield ‘1’;
yield ‘2’;
yield ‘3’;
return ‘4’;
}for(let v of ge()){
alert(V); // 1 2 3 4
}

四、yield与异步
函数在遇到yield后暂停运行,我们可以在需要的地方使用next让它继续运行。并且必要时可以使用next传入参数。
对于一些可能被多处引用的功能模块,建议提炼成业务组件统一管理。这些组件一般有以下特征:
只负责一块相对独立,稳定的功能;
没有单独的路由配置;
可能是纯静态的,也可能包含自己的 state,但不涉及 dva 的数据流,仅受父组件(通常是一个页面)传递的参数控制。

model里面包括以下五部分:namespace、state、reducers、effects、subscriptions,缺一不可。注意,这里也需要从service层导入相应的方法。
namespace 命名空间
namespace: ‘projects’
state 相当于原生React中的state状态,用于存放数据的初始值。
state: {
projectsData: []}
reducers 用于存放能够改变view的action,这里按照官方说明,不应该做数据的处理,只是用来return state,从而改变view层的展示。
reducers: {
getProjectAllData(state, action) {
return { …state, …action.payload };
},
}
effects 用于和后台交互,是处理异步数据逻辑的地方。
effects: {
*getAllProjects({ payload = {} }, { call, put }) {
try {
const res = yield call(projectsService.checkBranches, payload);
yield put({
type: ‘getProjectData’,
payload: {
projectsData: res.data
}
});
} catch (e) {
message.warning(e.message);
}
},
}
subscriptions 订阅监听,比如监听路由,进入页面如何如何,就可以在这里处理。相当于原生React中的componentWillMount方法。就比如上述代码,监听/project路由,进入该路由页面后,将发起getAllProjects aciton,获取页面数据。
subscriptions: {
setup({ dispatch, history }) {
return history.listen(({ pathname }) => {
if (pathname === ‘/projects’) {
dispatch({
type: ‘getAllProjects’
});
}
});
}
}
数据流向
数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会先触发 Effects 然后流向 Reducers 最终改变 State。

在react怎样引入jQuery
安装jQuery
npm i jquery -S
在那个地方使用jQuery就在什么地方引入jQuery
import $ from ‘jquery’
类似

使用Link,先引入Link
import {
BrowserRouter as Router,
Route,
Link
} from ‘react-router-dom’
有个很笨的办法可以出来效果:用menu的点击事件获取当前option的key存入state中,显示内容根据key值判断显示隐藏。方法虽然很笨,但是效果还行!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react+ant design pro+dva项目阶段型总结(不定时更新) 的相关文章

  • Apache Kafka Connect JNDI注入漏洞 (CVE-2023-25194) 安全风险通告

    https mp weixin qq com s biz MzU5NDgxODU1MQ mid 2247497666 idx 1 sn b58717baf54fe52ec517b89fe370f589 chksm fe79d35ac90e5
  • 微信小程序-wxParse插件的使用

    wxParse是一个微信小程序富文本解析组件 现在小程序里面自带了一个
  • [C语言]分支语句:if语句、switch语句

    分支语句也称为选择结构 条件判断语句 顾名思义 要么选择A 要么选择B 或选择其他的一种结构 在c语言中 常见的分支语句分别有 if语句和switch语句 目录 1 if语句 1 1if语句的结构 1 2if语句的注意点 2 switch语
  • cnpm 执行时卡住应该怎么解决?

    问题 执行cnpm i时程序卡住 没有反应 此时最常见的方法就两种 一种是重新启动 另一种就是卸载重装 这两个办法都是非常的有效的 遇到了这个问题重新执行发现还是无法解决 之后我就卸载重装了 cnpm 解决方案 1 先卸载之前的 cnpm
  • VScode运行C语言,qsort测试例子

    好久没用 刚好需要测试一下排序 顺便把VSCode的配置也记录一下 准备 1 安装编译环境 我用的mingw64 官网https sourceforge net projects mingw w64 files 记得安装好配置环境变量 或者
  • [C语言]关键字static 和我一起认识static

    static在c语言中可以用来修饰变量和函数 1 修饰局部变量 称为静态局部变量 2 修饰全局变量 称为静态全局变量 3 修饰函数 称为静态函数 1 修饰局部变量 称为静态局部变量 首先对比一下一下两条程序 程序一 include
  • Windows系统文件快捷链接(软链接/硬链接/符号链接)mklink

    记录学习mklink 将大文件从c盘移出 快捷方式 软链接 硬链接 符号链接 快捷方式 常见文件链接方式 在Windows上以 lnk结尾的文件 这类文件通常用于指定某一个文件或某一个目录的位置 可扩展性很强 桌面快捷方式就是这类了 软链接
  • 本地安装node.js安装,使用npm下载插件

    操作系统 windows10 开发工具 VS Code 1 下载node js文件 全程下一步即可 2 打开vscode 运行终端 此处打开的额终端路径是你当前的项目根目录 node中自带npm 所以安装号node就已经安装号 npm了 使
  • pip install 国内镜像源

    pip install XXX i https pypi tuna tsinghua edu cn simple 常见国内镜像源 清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirr
  • javascript中with的用法

    关键字with 任何对象都可以使用with 通过使用with可以减少写一点代码 使用方法如下 1 语法 with object jsvascript代码 参数 一个对象 必须是一个对象 假设我们传入了一个obj对象 用法 花括号中的 jsv
  • 前端项目使用小记

    main var prefix contextPath class manager classManager function load function load exampleTable bootstrapTable method ge
  • [C语言]常量、变量

    1 变量 1 1变量的定义 格式 数据类型 变量名 最好定义变量后给予他一个初始值 0 eg int a int age 18 char name XiaoMing float sum 2 5 1 2 变量的命名 只能由字母 包括大小写 数
  • 利用css实现鼠标经过元素,下划线由中间向两边展开

    代码如下
  • Invalid attempt to spread non-iterable instance错误

    在项目中需要对数组进行合并运算的时候产生的错误 经查询一般是扩展运算符报错 错误中指明了文件和行数 去打印一下查看对应的数据 结果显示后面这一个需要合并的数组是undefined 所以数组合并运算就报错了 去做对应处理 在data中的数据p
  • 在HTML5中有什么可以替代iFrame

    最佳解决方法 通常有4种方法可以将HTML嵌入到网页中 iframe的内容完全位于当前页面不同的上下文中 虽然这是一个很棒的功能 而且是不同浏览器版本之间兼容最好的 但是它也带来了额外的问题 将frame大小跟网页内容设置一致比较麻烦 AJ
  • 统计数字出现的次数

    在论坛上看到这么一个题 JAVA题 要求任意输入20个10以内的整数 并判断输出每个数字的出现次数并输出 这个题也可以转化为 长度为n n lt 1000 的整数 输出每个数字出现的次数 上面两个题意思相同 每个数字范围只有 0 9 所以我
  • 【学习之路】axios之axios.CancelToken

    写法 接受一个回调函数作为参数 new axios CancelToken cancel gt cancel是取消本次请的方法 if xxx cancel else TODO 一般用法 用于发出多个相同请求时 取消重复请求 使用场景 使用数
  • Jetson TX2 外接开机键

    J20端子最下面两个插针对应PWR和GND 短接即可开机 左侧丝印已经标注出J20插针的定义
  • Android studio卡顿问题

    使用Android studio版本是2 3 3 最近在使用Android studio时候遇到一件事情 项目开始到中期Android studio好好的 流畅得一批 但是某天快要收尾了 使用Android studio打开项目后 鼠标开始
  • 前端页面之间url传参

    function getUrlParam name var reg new RegExp name var r window location search substr 1 match reg ECMAScript v3 已从标准中删除了

随机推荐

  • MySQL之DQL——查询语言

    前言 今天给大家带来关于数据库查询相关操作 希望各位看官能看个愉快 目录 一 基本概念 1 1 基本概念 1 2 SQL语言的分类 1 3 数据库的存储特点 二 MySQL 2 1 MySQL服务的登录和退出 2 2 MySQL服务的启动和
  • 重磅!Cloud Ace 在班加罗尔和孟买成立新的据点

    Cloud Ace Cooperation 总部位于东京千代田区 Makoto Aoki 总裁 很高兴地宣布 我们已经在班加罗尔建立了新的开发中心 并在孟买建立了新的销售办事处 作为 Cloud Ace 进一步扩大公司在印度业务的努力的一部
  • MySQL之DML

    1 添加数据 语法 insert into 表名 列名1 列名2 列名n values 值1 值2 值n 注意 1 列名和值要一一对应 2 如果表名后 不定义列名 则默认给所有列添加值 insert into 表名 values 值1 值2
  • 关于多线程爬取的加强练习

    多线程能够帮助我们提升爬取爬虫爬取的速度 上一篇文章我们也讲到了如何简单的使用多线程来爬取自己想要要去的东西 今天我们来加强以下 今天我们的目标是多线程爬取股票网站的信息 并保存成文件 本次保存文件的格式为txt 各位想保存别的格式也可以哦
  • 带vector<T>的模板函数

    若两个函数的逻辑相同 但参数类型不同 则可以把这2个函数合并为一个模板函数 有利于精简代码和提高可读性 比如 函数A 将CString的三个动态数组 vector
  • java 使用itextpdf工具实现HTML转PDF文件

    java 使用itextpdf工具实现HTML转PDF文件 本文转载https my oschina net 960823 blog 1588166内容 demo maven依赖包
  • Ubuntu16.04安装ROS时,sudo rosdep init报错,Error: cannot download default sources list from:

    安装ROS时需要安装rosdep 但是由于外网访问不了 所以访问不了https raw githubusercontent com 网站 因此在执行sudo rosdep init这一步时 会提示 如下图 ERROR cannot down
  • LINUX中常用操作命令

    Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机 重启机器 Linux管道 Linux软件包管理 vim使用 用户及用户组管理 文件权限管理 大牛笔记 www weixuehao com 来自 http ww
  • 5.1之前, 全局变量存储在_G这个table中, 这样的操作:5.3 lua_setupvalue

    5 1之前 全局变量存储在 G这个table中 这样的操作 a 1 相当于 G a 1 但在5 2之后 引入了 ENV叫做环境 与 G全局变量表产生了一些混淆 需要从原理上做一个理解 在5 2中 操作a 1 相当于 ENV a 1 这是一个
  • 使用ElasticLunr.js进行客户端搜索

    任何博客或文档网站都需要搜索功能 您可以通过多种方式实现这一目标 并且很可能会选择服务器端解决方案 但是 如果您不想处理任何后端 则可以通过lunr js在客户端实现所有后端 几年前 我首次发现Lunr js 但自从我决定使用服务器端选项
  • centos部署openvas

    开放式漏洞评估系统OpenVAS Open Vulnerability Assessment System OpenVAS是开放式漏洞评估系统 也可以说它是一个包含着相关工具的网络扫描器 其核心部件是一个服务器 包括一套网络漏洞测试程序 可
  • 23062C++&QT day2

    封装一个结构体 结构体中包含一个私有数组 用来存放学生的成绩 包含一个私有变量 用来记录学生个数 提供一个公有成员函数 void setNum int num 用于设置学生个数 提供一个公有成员函数 void input 用来对所有学生的成
  • phpstorm如何回滚。并取消本地提交

    1 现在我提交到本地 当前git版本为4b53dca9 上一版本为965cdf14 2 现在执行回滚操作 取消本地提交 版本复制到这里 点击reset就会回滚了 如需使用git命令操作 请参考链接https blog csdn net qq
  • Java 堆排序(大顶堆、小顶堆)

    引用 http lib csdn net article datastructure 8973 堆排序 Heapsort 是指利用堆这种数据结构所设计的一种排序算法 堆积是一个近似完全二叉树的结构 并同时满足堆积的性质 即子结点的键值或索引
  • 欧几里德求最大公约数

    欧几里德求最大公约数也是就辗转相除法 是最基础最简单的算法之一 求最大公约数 int gcd1 int a int b if a lt b swap a b return b 0 a gcd1 b a b int gcd2 int a in
  • 几款国产FPGA系列器件参数汇总

    以下是和厂商确认以及个人在各公司官网上获取的产品参数 部分产品价格可用作参考 价格实时变动 只能作参考 1 高云半导体 FPGA 器件型号 逻辑查找表 RAM资源 I O资源 pll 触发器资源 嵌入式内核 易失性 价格 晨熙系列 GW2A
  • 【并查集】黑魔法师之门

    黑魔法师之门 magician pas c cpp 题目描述 经过了16个工作日的紧张忙碌 未来的人类终于收集到了足够的能源 然而在与Violet星球的战争中 由于Z副官的愚蠢 地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Vio
  • 微信小程序使用web-view引入了vue页面,再从vue页面跳转到微信小程序页面

    在vue项目中引入weixin js sdk插件 npm i weixin js sdk save 在vue组件中引入 import wx from weixin js sdk 跳转微信小程序普通页面 wx miniProgram navi
  • 还不会gdb?看这一篇就够了

    目录 gdb是什么 它有啥威力 gdb常用命令 gdb实战 基本使用 解决coredump 总结 大家好 我是小李 今天这一篇博客来跟大家介绍一个非常有用的工具 gdb 不管是学习还是工作中 用好gdb 能让你的程序更加丝滑 gdb是什么
  • react+ant design pro+dva项目阶段型总结(不定时更新)

    1 如果你熟悉 HTML 那么 JSX 对于你来说是没有任何压力的 因为 HTML 中的所有标签 在 JSX 中都是支持的 基本上没有学习成本 只有如下几点略微的不同 class 属性变为 className tabindex 属性变为 t