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

箭头函数

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

基本语法

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

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

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

javascript 复制代码
//定义一个函数,用于做参数使用
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

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

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

import

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

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

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

javascript 复制代码
//{}可用,分隔一次导入多个模块
import React, {PropTypes} from 'react';

//等价于下面两行代码
import React from 'react;
const PropTypes = React.PropTypes;

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

  • 配置数据
javascript 复制代码
//classification.js
export default {
  grapes: [
    'Baco Noir',
    'Barbera',
  ], 
}
  • 配置数据引用
javascript 复制代码
//schema.js
import classification from './classification';

export default [
  {
    id: 'grape', //--
    label: 'Grape',
    type: 'suggest',
    options: classification.grapes, 
    show: true,
    sample: 'Merlot', //---
    align: 'left',
  },
]
  • 配置数据使用
javascript 复制代码
"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
javascript 复制代码
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
javascript 复制代码
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{}

javascript 复制代码
const { zhi } = Gao; //等价于 const zhi = Gao.zhi

const {a} = {a:1} //1

const {a} = {a:1, b:2}; //1

var、let、const的区别

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


持续增加中...

相关推荐
Jing_Rainbow几秒前
【前端三剑客-9 /Lesson17(2025-11-01)】CSS 盒子模型详解:从标准盒模型到怪异(IE)盒模型📦
前端·css·前端框架
爱泡脚的鸡腿4 分钟前
uni-app D6 实战(小兔鲜)
前端·vue.js
青年优品前端团队6 分钟前
🚀 不仅是工具库,更是国内前端开发的“瑞士军刀” —— @qnvip/core
前端
骑自行车的码农9 分钟前
🍂 React DOM树的构建原理和算法
javascript·算法·react.js
北极糊的狐14 分钟前
Vue3 中父子组件传参是组件通信的核心场景,需遵循「父传子靠 Props,子传父靠自定义事件」的原则,以下是资料总结
前端·javascript·vue.js
看到我请叫我铁锤1 小时前
vue3中THINGJS初始化步骤
前端·javascript·vue.js·3d
q***25211 小时前
SpringMVC 请求参数接收
前端·javascript·算法
q***33371 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
烛阴1 小时前
从`new()`到`.DoSomething()`:一篇讲透C#方法与构造函数的终极指南
前端·c#
还债大湿兄1 小时前
阿里通义千问调用图像大模型生成轮动漫风格 python调用
开发语言·前端·python