react开发环境
1. 使用create-react-app脚手架创建react项目
npm install -g create-react-app
create-react-app react_jobs
npm install redux --save
npm run eject
ES6常用语法
ES6是什么?
它是一套新的Javascript语法标准,2015年6月正式发布,可使用babel语法转换器,转换后支持低端浏览器;流行的库基本都基于ES6构建,React默认使用ES6新语法开发
ES6里都有什么
- 块级作用域(let、const)、字符串(返引号“:模板字符串)、函数(箭头函数,函数允许有默认值(param=’val’),展开符(…:批量传递参数)
const hello = (val1, val2) {
console.log(val1, val2)
}
let arr = ['lmh', 'zf']
hello(...arr)
- 对象扩展
- Object.keys、values、entries
- 对象方法简写,计算属性
- 展开运算符(不是ES6标准,但是babel也支持)
const obj = {name: 'lmh', course: 'zf'};
// ["name", "course"]
console.log(Object.keys(obj))
// ["lmh", "zf"]
console.log(Object.values(obj))
// [["name", "lmh"], ["course", "zf"]]
console.log(Object.entries(obj))
// {name: 'imooc', imooc: 'hello', hello: hello1() {imooc: 'hello', name: 'immoc'}
const name = 'imooc'
const obj = {
name,
[name]: 'hello',
hello: function() {},
hello() {}
}
console.log(obj)
// 对象连接
const obj = {name: 'immoc', course: 'React'}
const obj2 = {type: 'IT', name: 'lmh'}
// {course: 'React', date: '2018', name: 'lmh', type: 'IT'}
// 注意,合并后会以key值进行重新排序,顺序会发生变化
console.log({...obj, ...obj2, date: '2018'})
- 解构赋值
- 数组解构
const arr = ['hello', 'imooc']
let [arg1, arg2] = arr
console.log(arg1,'|', arg2)
2. 对象解构
const obj = {name: 'imooc', course: 'react'}
const {course, name} = obj
console.log(name, '|', course)
- 类class的语法糖
- 是prototype的语法糖
- Extends继承
- Constructor构造函数
class MyApp {
constructor() {
this.name = 'imooc'
}
sayHello() {
console.log(`hello ${this.name} !`)
}
}
const app = new MyApp()
// hello imooc!
app.sayHello()
- ES6中新出现的数据结构
- Set, 元素不可重合
- Map
- Symbol
- 模块化:ES6中自带了模块化机制,告别sea.js和require.js
- Import, import{}
- Export、Export default
- Node现在还不支持,还需要用require来加载文件
// module.js文件
export const name = 'imooc123'
export function sayHello() {
console.log('immoc')
}
export default function test() {
console.log('hello')
}
import {name, sayHello} from './module.js'
console.log(name)
sayHello()
import test from './module.js'
import * as mod1 from './module.js'
console.log(mod1)
- 还有一些特性,虽然不在ES6的范围,但是也被babel所支持,普遍被大家接受和使用(需要安装插件)
- 对象扩展符,函数绑定
Babel-plugin-transform-object-rest-spread插件,支持扩展符号 - 装饰器
- Async await
- Promise
- 迭代器和生成器
- 代理Proxy
- 常用数组函数
[1,2,3].forEach(function(value, index) {
console.log(value);
});
arr = [1,2,3].map(v => v*2);
[1,2,3,4].every(v => v>3);
[1,2,3,4].some(v => v>3);
[1,2,3,4,5].filter(v => v>3);
[1,2,3].indexOf(2);
arr1 = [1,2,3];
arr2 = [3,4,5];
[...arr1, ...arr2];
arr = [1,2,3,4,3,2,1];
[...new Set(arr)];
var a = {name: 'lmh', age: 23, address: 'beijing'}
var {address, ...params} = a
console.log(params)