React开发必须掌握这些es6语法-03

箭头函数

其实就是java的lamda编程,它的特点是单向无环流,没有变量,源数据状态不能被改变。

基本语法

()=> {} //表示一个空函数,和function(){}功能一样,如果只有一行语句则,{}可省略
lef fn = arg => {} //如果函数只有一个参数,刚可省略参数()
(do, what) => console.log(do, what) //表示带两个参数的函数,这行语句在console之前默认带了一个return 

将函数或组件做为参数传递

下面就是一个例子,把add做为参数传递给logs函数。

//定义一个函数,用于做参数使用
const add = (x, y) => x+y;//声明了接受func参数的函数logs,返回另一个函数,另一个函数的参数为...args
const logs = func => (...args) => {return func(...args);
}
//调用
const l = logs(add);

export和import

export和import 是一种CommonJS方案。它的底层是使用var Logo = require(./components/Logo)module.exports=Logo实现的。

export

可以导出一个或多个对象、函数、变量,主要是为了安全,防止全是全局变量;

export default Logo  //这后面一般没有分号,而且一个js文件只能有一个default

import

与export对应,如果是通过npm全局安装的模块则不用写路径,直接用 import React from 'react'

import Logo from './components/Logo;
  1. ./components/Logo:表示模块本地相对路径,后面也可以带.js,但不建议带;
  2. Logo:和 export default Logo 值对应;

另外还有一种更简要的写法,如下:

//{}可用,分隔一次导入多个模块
import React, {PropTypes} from 'react';//等价于下面两行代码
import React from 'react;
const PropTypes = React.PropTypes;

使用export实现组件初始化配置

  • 配置数据
//classification.js
export default {grapes: ['Baco Noir','Barbera',], 
}
  • 配置数据引用
//schema.js
import classification from './classification';export default [{id: 'grape', //--label: 'Grape',type: 'suggest',options: classification.grapes, show: true,sample: 'Merlot', //---align: 'left',},
]
  • 配置数据使用
"use strict";
import schema from './schema';//从缓存中取数据
let data = JSON.parse(localStorage.getItem('data'));
// 如果没取到,则读取默认的schema配置
if (!data) {data = {};schema.forEach((item) => data[item.id] = item.sample);data = [data];
}

导出/导入公用数据类型

可以把自定义类型用export导出供其它组件使用,相当于java中final static class的概念,其用法如下:

  • 导出 FormInput.js
type FormInputFieldType = 'year' | 'suggest' | 'rating' | 'text' | 'input';
export type FormInputFieldValue = string | number;export type FormInputField = {type: FormInputFieldType,defaultValue?: FormInputFieldValue,id?: string,options?: Array<string>,label?: string,
};
  • 导入Button.js
import type {FormInputField, FormInputFieldValue} from './FormInput';type Props = {fields: Array<FormInputField>, //使用initialData?: Object,readonly?: boolean,
};class Form extends Component {props: Props;getData(): Object {let data: Object = {};this.props.fields.forEach((field: FormInputField) =>  //使用data[field.id] = this.refs[field.id].getValue());return data;}
}  

const{}

const { zhi } = Gao; //等价于 const zhi = Gao.zhiconst {a} = {a:1} //1const {a} = {a:1, b:2}; //1

var、let、const的区别

  • var 全局变量:没有块的概念,可以跨块访问,不能跨函数访问
  • let 局部变量:只能在块作用域内访问,不能跨块访问,也不能跨函数访问
  • const 定义常量:定义时必须初始化,不能修改,只能在块作用域里访问
   for (let i = 0; i < 2; i++) {console.log(i);//正确}console.log(i);//报错: i is not definedfor (var i = 0; i < 2; i++) {console.log(i);//正确}console.log(i);//正确:2
  • var声明变量存在变量提升,即可以先使用后定义,虽然逻辑不对,但程序不会报异常。而let和const则不存在变量提升,所以用 let 定义的变量一定要在声明后再使用,否则会报错
  • var 变量可以多次声明,而 let 不允许在相同作用域内,重复声明同一个变量。

async、await

  • async:用于申明一个function是异步的;
  • await:则可以认为是 async await的简写形式,是等待一个异步方法执行完成的;await关键字只能在async函数内部使用。它可以暂停async函数的执行;
async function asyncFunction() { //这是一个异步方法let promise = new Promise((resolve, reject) => {setTimeout(() => resolve("完成"), 1000)});let result = await promise; // 等待,直到Promise执行完成 (resolve)console.log(result); // "完成"
}
//调用
asyncFunction();


持续增加中…

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

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

相关文章

【QNX】Qnx IPC通信 Message-passing

Qnx IPC通信 Message-passing Message-passing介绍 QNX提供了多种IPC(Interprocess Communication )通信方式&#xff0c;包括Message-passing、Plus&#xff08;脉冲&#xff09;、Event、Signal、共享内存、Pipe&#xff0c;当然还有socket。 Message-passing是Qnx IPC的主…

机器学习 - 特征预处理 - 分箱

分箱&#xff08;Binning&#xff09;是一种数据预处理技术&#xff0c;将连续变量分割成离散的组别或区间&#xff0c;有助于减少数据的噪音&#xff0c;提高模型的稳定性。以下是五种常见的分箱方法及其详细介绍&#xff1a; 1. 卡方分箱&#xff08;Chi-square Binning&…

【数据结构与算法 经典例题】判断链表是否带环

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录

渗透测试框架之CobaltStrike,Metasploit域名上线隐藏IP

概述 为什么要隐藏IP 在拿下了目标机之后&#xff0c;目标机在内网里面&#xff0c;使用msf或者CS时&#xff0c;用自己的VPS做服务器的话&#xff0c;导致很容易被溯源。 域名上线原理 当我们访问域名时会经过域名解析 域名解析就是域名到IP地址的转换过程&#xff0c;那么…

头歌传送指令第1关:传送指令 mov

编程要求 根据下方的所给的汇编代码&#xff0c;在右侧编辑器的代码文件的 Begin - End 区域内补充 C 语言代码。 mov %esp,%ebpand $0xfffffff0,%espsub $0x20,%espmovl $0xa,0x18(%esp)mov 0x18(%esp),%eaxmov %eax,0x1c(%esp)mov 0x1c(%esp),%eaxmov %eax,0x8(%esp)mov 0x18…

dubbo复习:(9)配置中心的大坑,并不能像spring cloud那样直接从配置中心读取自定义的配置

配置中心只是为 Dubbo 配置提供管理使用的&#xff08;比如配置服务超时时间等)。不要尝试通过Value类似的方式从dubbo 配置中心(比如nacos、zookeeper、Apollo)来获取数据 https://github.com/apache/dubbo/issues/11200可以在application.yml中主要写注册中心的配置&#xf…

【深度学习基础】NumPy数组库的使用

目录 写在开头 一、数组的类型与维度 数组的类型 数组的维度 二、数组的创建 递增数组 同值数组 随机数数组 三、数组的索引 访问/修改单个元素 花式索引 数组的切片 四、数组的变形 数组的转置 数组的翻转 数组的形状改变 数组的拼接 五、数组的运算 数…

Linux系统启动原理

Linux系统启动原理及故障排除 Centos6系统启动过程 修改系统启动级别 vim /etc/inittabCentos7启动流程 加载BIOS信息&#xff0c;进行硬件检测 根据BIOS设定读取设备中的MBR&#xff0c;加载Boot loader 加载内核&#xff0c;内核初始化以后以模块的形式动态加载硬件 并且加…

FFmpeg的流程

文章目录 前序代码结构FFmpeg.cffmpeg_opt.c 小结 前序 之前看过FFmpeg的各种命令&#xff0c;然后不是很理解。相信很多人都不是很理解&#xff0c;毕竟&#xff0c;单纯的去记住那些命令行本身就需要很大的内存&#xff0c;我们的大脑内存又有限&#xff0c;所以&#xff0c…

java “错误:编码GBK 的不可映射字符”

环境&#xff1a;JDK-17 本机编码&#xff1a;utf-8 代码编码&#xff1a;GBK 错误&#xff1a;java “错误&#xff1a;编码GBK 的不可映射字符” 解决1&#xff1a;记事本打开java源文件&#xff0c;另存为选择ANSI编码 解决2&#xff1a;复制代码再将编码格式改为utf-8,…

内网环境基础

什么是内网渗透? 在得到webshell后下一步渗透就是内网渗透 内网渗透就是拿到企业或者公司的内网权限&#xff0c;然后从内网得到最有价值的战果。 内网渗透和外网渗透有啥区别? 内网渗透&#xff1a;比如公司内部局域网 或者酒店内部局域网等。从内部寻找安全问题 外网渗…

错题本之<数据结构>

已知指针 p 指向单向不循环链表中的某一个节点&#xff0c;且不知道头结点。 问&#xff1a;如何删除 p 指向的节点&#xff1f; 答&#xff1a; 如果 p 指向的不是最后一个节点 定义一个指针 q 保存 p->next; 然后将 q 的数据域和指针域都覆盖到 p 指向的节点中 最后释放 …

java欢迪迈手机商城设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的欢迪迈手机商城设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 欢迪迈手机商城…

[emailprotected](10)HOC高阶组件和横切关注点

目录 1&#xff0c;什么是HOC2&#xff0c;什么是横切关注点2.1&#xff0c;简单理解2.2&#xff0c;常见解决方式 3&#xff0c;HOC 举例3.1&#xff0c;全局功能3.2&#xff0c;小范围使用 4&#xff0c;HOC 使用注意点4.1&#xff0c;不要在 render 中使用4.2&#xff0c;不…

spring状态机实战

一、什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型&#xff0c;是一种概念性机器&#xff0c;它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件&#xff0c;还能取决于各个事件的相对发生顺序。状态…

不同网段的通信过程

这里的AA和HH指的是mac地址&#xff0c;上面画的是路由器 底下的这个pc1&#xff0c;或者其他的连接在这里的pc&#xff0c;他们的默认网关就是路由器的这个192.168.1.1/24这个接口 来看看通信的过程 1、先判断&#xff08;和之前一样&#xff09; 2、去查默认网关&#xf…

基于SpringBoot和Hutool工具包实现的验证码案例

目录 验证码案例 1. 需求 2. 准备工作 3. 约定前后端交互接口 需求分析 接口定义 4. Hutool 工具介绍 5. 实现验证码 后端代码 前端代码 6. 运行测试 验证码案例 随着安全性的要求越来越高&#xff0c;目前项目中很多都会使用验证码&#xff0c;只要涉及到登录&…

MySQL Mysqldump备份时的错误提示

MySQL Mysqldump备份时的错误提示 执行mysqldump备份数据库时&#xff0c;命令如下&#xff1a; mysqldump -h8.137.112.148 -udbusername -pdbpassword dbname > /opt/backup_mysql/bkdata/$(date "%Y%m%d%H%M%S")出现以下错误&#xff1a; mysqldump: Could…

Liunx系统中修改文件的创建时间以及访问时间

在Linux系统中&#xff0c;可以使用touch命令来修改文件的时间戳。以下是一些常用的touch命令选项&#xff1a; &#xff08;其实在MacOS中也适用&#xff09; 修改访问时间&#xff08;Access Time&#xff09;和修改时间&#xff08;Modification Time&#xff09;&#xf…