React


React官网

配置环境

npm挂代理

  • 查看npm配置信息 npm config list
  • 为npm设置代理
npm config set proxy http://server:port
npm config set https-proxy http://server:port

安装Git Bash

Git

Git挂代理

  • Git配置文件位置git config --list --show-origin

  • 全局配置文件

  • 局部配置文件

  • 系统配置文件

设置和取消代理

git config --global https.proxy http://127.0.0.1:1080

git config --global https.proxy https://127.0.0.1:1080

git config --global --unset http.proxy

git config --global --unset https.proxy

安装Node.js

Node.js

安装create-react-app

在终端执行npm i -g create-react-app

如果你遇到版本过低的警告又不想忽视他

请使用:

npx create-react-app create-react-app 
cd create-react-app 
npm start
npm install --save-dev @babel/plugin-proposal-private-property-in-object
npm install --save-dev @babel/plugin-transform-private-property-in-object

安装vscode插件

  • Simple React Snippets

  • Prettier - Code formatter

创建React App

在你的项目目录下打开Git Bash或者你使用的终端

create-react-app react-app  # 可以替换为其他app名称

cd react-app
npm start  # 启动应用

vscode-powershell禁止运行脚本

如果你遇到如下错误:

请使用git bash打开执行或者参考如下解决方案。

原因

PowerShell执行策略问题

解决方法

  • 以管理员身份运行vscode;

  • 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的;

  • 执行:set-ExecutionPolicy RemoteSigned;

  • 这时再执行get-ExecutionPolicy,就显示RemoteSigned;

JSX && Babel

在JavaScript基础上,让我们能够支持xml。

Babel将jsx代码编译成js

Babel

ES6语法糖

使用bind()函数绑定this的值

const person = {
  name: "yxc",
  talk: function(){
    console.log(this);
  }
}

person.talk();

const talk = person.talk;
talk();

输出结果:

说明this输出的是运行时调用他的对象

所有的全局变量挂在window下,所以第二个talk的this指向window

可以通过:

const talk = person.talk.bind(person);

将person这个变量绑定在talk这个函数上。

这样的运行结果是:

箭头函数简写方式

例如以下箭头函数:

const f = (x) => {
  return x * x;
};

console.log(f(4));

如果输入只有一个参数,可以去掉参数括号:

const f = x => {
  return x * x;
};

console.log(f(4));

当函数体只有一个return,可以删掉return,同时删掉大括号。

const f = x => x * x;

console.log(f(4));

箭头函数不重新绑定this

无箭头函数时:

const person = {
  talk: function () {
    setTimeout(function () {
      console.log(this);
    }, 1000);
  },
};

person.talk();

使用箭头函数时:

const person = {
  talk: function () {
    setTimeout(() => {
      console.log(this);
    }, 1000);
  },
};

person.talk();

因为箭头函数没有this,所以会向上找this。

对象的解构

传统写法:

const person = {
  name: "yxc",
  age: 18,
  height: 180,
};

const name = person.name,
  age = person.age;

console.log(name, age);

解构写法:

const person = {
  name: "yxc",
  age: 18,
  height: 180,
};

const { name, age } = person;

console.log(name, age);

别名:

const person = {
  name: "yxc",
  age: 18,
  height: 180,
};

const { name: new_name, age } = person;

console.log(new_name, age);

此时: new_name即为 name 的别名。

数组和对象的展开

let a = [1, 2, 3];
let b = [4, 5, 6];

let c = [-1,0,...a,3.5, ...b,7,8,9];
let a = [1, 2, 3];
let b = [4, 5, 6];

let c = [...a]; //此时a和c不是一个数组。深拷贝
let d = a; //此时a和d是一个数组。浅拷贝
if (c === a) {
  console.log("a===c");
} else {
  console.log("a!==c");
}

if (d === a) {
  console.log("d===a");
} else {
  console.log("d!==a");
}

字典的展开:

let a = { name: "yxc" };
let b = { age: 18 };

let c = { ...a, ...b, height: 180 };

console.log(c);

若声明对象,{“boxes”: “boxes”},若key和value一样,可以简写为{“boxes”}

Named与Default exports

  • Named Export:可以export多个,import的时候需要加大括号,名称需要匹配
export default class Player {
  constructor() {
    console.log("new Player");
  }
}

let id = 1;
export { id };

名字必须相同,但可以使用as定义别名

import MyPlayer, { id as id1 } from "./player";

new MyPlayer();

console.log(id1);
  • Default Export:最多export一个,import的时候不需要加大括号,可以直接定义别名
export default class Player {
  constructor() {
    console.log("new Player");
  }
}

引用的时候可以随意改名字,且只能创建一个

import MyPlayer from "./player";

new MyPlayer();

Component

新建项目

create-react-app box-app

安装bootstrap

cd ./box-app
npm i bootstrap

导入

import "bootstrap/dist/css/bootstrap.css";

文章作者: Keyen Zhou
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Keyen Zhou !
  目录