Web学习笔记-React

news2025/8/6 20:37:40

笔记内容转载自AcWing的Web应用课讲义,课程链接:AcWing Web应用课。

CONTENTS

    • 1. React配置环境
    • 2. ES6语法补充
    • 3. Components

1. React配置环境

React官网:React。

React是一个声明式,高效且灵活的用于构建用户界面的JavaScript库。使用 React 可以将一些简短、独立的代码片段组合成复杂的UI界面,这些代码片段被称作components。React能够构建那些数据会随时间改变的大型应用。

React特性:

  • React为了能够方便地去维护我们的页面,它在内存里面创建了一个虚拟的DOM树:Virtual DOM,这是一个轻量级的虚拟的DOM,就是React抽象出来的一个对象,描述DOM应该什么样子的,应该如何呈现。通过这个Virtual DOM去更新真实的DOM,由这个Virtual DOM管理真实DOM的更新。
  • 数据驱动:当某一个元素里的数据发生变化后,React会重新将有可能修改的元素都修改一遍,然后与真实的DOM树对比是否有区别,React分析完后最终只会修改真实改变的结点。由于在内存里修改对象的速度很快,因此React效率很高。
  • React一般不直接手写JS,而是通过编写JSX文件,JSX比JS更好写一点,React会先将JSX编译成JS。

(1)安装Git Bash:Windows安装Git教程(2022.11.18 Git2.38.1)。

(2)安装NodeJS:NodeJS的安装及配置。

(3)安装create-react-app
打开Git bash,执行以下命令:

npm i -g create-react-app

如果速度很慢,可以先修改镜像源再尝试安装:

npm config set registry https://registry.npm.taobao.org
npm i -g create-react-app

如果安装完成后出现警告:npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.,可以先更新tar试试:

npm install -g tar

如果还是有警告,且创建项目时(例如执行create-react-app react-app)报错:bash: create-react-app: command not found,使用以下方法创建项目:

npx create-react-app react-app
cd react-app
npm start

启动后的效果如下(ctrl+c即可停止服务):

在这里插入图片描述

在这里插入图片描述

(4)配置VS Code插件:Simple React Snippets、Prettier - Code formatter
Simple React Snippets是React智能化自动补全插件:

在这里插入图片描述

例如输入imrc即可补全出以下内容:

import React, { Component } from 'react';

输入cc即可补全出以下内容:

class Example extends Component {
    state = {  } 
    render() { 
        return ();
    }
}
 
export default Example;

Prettier - Code formatter是代码格式化插件:

在这里插入图片描述

(5)创建React App
在目标目录下右键打开Git Bash:

在这里插入图片描述

在终端中执行:

npx create-react-app react-app  # react-app是新建项目的名字,可以替换为其他名称
cd react-app
npm start  # 启动应用

启动成功后会在本地开一个3000端口,页面效果已在上文展示。此时使用VS Code打开react-app文件夹:

在这里插入图片描述

其中,node_modules用来维护各种JS库,未来安装的所有依赖项都会放在该文件夹下;public中的index.html就是我们未来渲染出的页面,该文件中只有一个<div id="root"></div>src中的index.js代码如下:

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));  // 获取div同时创建为一个React对象
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

其中App的定义在App.js中:

import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

App组件就定义了页面的具体内容,且我们能够发现该JS文件中有HTML代码,因此该文件即为JSX文件,能够在JavaScript的基础上支持XML(可扩展标记语言),HTML也是一种特殊的XML。

JSX是React中的一种语言,会被Babel编译成标准的JavaScript。

2. ES6语法补充

ES6,全称ECMAScript 6.0,是JavaScript的版本标准。此处添加一些React中常用的语法糖。

(1)使用bind()函数绑定this取值
在JavaScript中,函数里的this指向的是执行时的调用者,而非定义时所在的对象。例如:

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

person.talk();

const talk = person.talk;
talk();

运行结果为:

{name: 'abc', talk: f}
undefined

使用bind()函数绑定this的取值为person。例如:

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

运行结果为:

{name: 'abc', talk: f}
{name: 'abc', talk: f}

(2)箭头函数的简写方式
当函数参数只有一个时可以将括号去掉,当函数体只有一个return语句时可以把return{}一起去掉,例如:

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

等价于:

const f = x => x * x;

(3)箭头函数不重新绑定this的取值

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

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

person.talk();  // 输出 {talk: f}

(4)对象的解构

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

const {name : new_name, age} = person;  // new_name是name的别名

(5)数组和对象的展开

let a = [1, 2, 3];
let b = [...a];  // b是a的复制,和a不是一个数组,如果写let b = a则b和a是同一个数组
let c = [...a, 4, 5, 6];  // c = [1, 2, 3, 4, 5, 6]

let d = {name: "abc"};
let e = {age: 18, height: 180};
let f = {...d, ...e, weight: 120};  // f = {name: "abc", age: 18, height: 180, weight: 120}

(6)Named exports与Default exports

  • Named Export:可以export多个,import的时候需要加大括号,名称需要匹配,即之前使用的方式。
  • Default Export:最多export一个,import的时候不需要加大括号,可以直接定义别名。

3. Components

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

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

相关文章

凡事预则立,不预则缺货!2022年底了核芯物联蓝牙AOA定位基站GA25缺货!GA10缺货!GA60也缺货!

凡事预则立&#xff0c;不预则缺货&#xff01;2022年底了核芯物联蓝牙AOA定位基站GA25缺货&#xff01;GA10缺货&#xff01;GA60也缺货&#xff01; 核芯物联岳毅恒 ​ 深圳核芯物联科技有限公司 战略合作拓展总监 凡事预则立&#xff0c;不预则缺货&#xff01;202222年底…

brython | 初探鼠标事件-1:点击事件

各位前端大佬勿笑话&#xff0c;运维小弟献丑了。 前段时间看见大佬使用【文言文】写了一个连连看&#xff0c;于是我也想用【brython】也实现一个连连看。 于是乎&#xff0c;你们就看到这篇文章和这个项目了。 如果大佬们对brython不是特别了解的话&#xff0c;建议先查看之…

JVM分析工具

JVM在运行过程中&#xff0c;我们可以利用各种工具对JVM进行分析&#xff0c;这是性能调优的利器。可以通过各种工具了解在系统运行过程中&#xff0c;在JVM底层到底发生了什么。JVM分析工具一般分为两种&#xff0c;一种是命令行工具&#xff0c;一种是图形界面工具。 JVM分析…

卷积操作的不同类型

文章目录1. 一维卷积2. 二维卷积3. 三维卷积4. 扩张卷积5. 空洞卷积6. 分组卷积一般而言&#xff0c;一维卷积用于文本数据&#xff1b;二维卷积用于图像数据&#xff0c;对宽度和高度都进行卷积&#xff1b;三维卷积用于视频及3D图像处理领域&#xff0c;对立方体的三个面进行…

CS5269TypeC转HDMI2.0+VGA带PD100W快充拓展坞方案芯片完整设计资料(原理图+PCB文件)

CS5269TypeC转HDMI2.0VGA带PD100W快充方案芯片原理图&#xff1a; 用于US Type-C或DP1.4连接到HDMI2.0转换器。CS5269集成了DP1.4HDMI2.0的输出端和VGA输出接口。另外&#xff0c;两个CC控制器包括CC通信&#xff0c;以实现DP Alt模式和功率传输功能&#xff0c;一个用于上游类…

SD-WAN NFV uCPE VNF

NFV&#xff08;network function virtulization) NFV&#xff08;network function virtulization&#xff0c;网络功能虚拟化&#xff09;是指一种操作框架&#xff0c;目的是为了将部署在COTS硬件上的、在虚拟基础架构中的VNF软件设备编排和自动化起来&#xff0c;然后进行…

精耕丨“银发族”与“熬夜党”都在养生,大健康品牌怎样精耕消费者需求?

“被疫情偷走的这三年”里&#xff0c;健康成为所有人不得不面对的生活命题。 丁香医生《2022国民健康洞察报告》显示&#xff0c;2021年人们平均存在4.8个健康困扰&#xff0c;算得上“人均亚健康”&#xff0c;其中情绪、身材、皮肤焦虑位列TOP3。 人们对稳住健康的追求也一…

5G无线技术基础自学系列 | 物理共享信道分配

素材来源&#xff1a;《5G无线网络优化实践》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 在LTE协议中&#xff0c;DCI的位置和对应…

第一章《初学者问题大集合》第8节:Java程序初步释疑

当成功运行了第一个Java程序,很多读者都对之前的各项操作以及所写的这行代码有一些不清楚的地方,本节就来解答一下这些问题。其实,初学者的大部分疑问都集中体现在图1-41中。 图1-41 源文件名与类名称 1.类是个什么东西? 前文曾经让各位读者在写代码之前先创建一个“类”…

day065:IO流、字节流、字节流写数据

目录 一、IO流 1.IO流的目的 2.IO的表示 二、IO流的分类 1.按流向分 2.按数据类型分 三、字节流 1.字节流写数据 2.字节流的注意事项 3.字节流写数据的三种方式 4.字节流写数据的两个问题 &#xff08;1&#xff09;字节流写数据如何换行&#xff1f; &#xff08;…

腾讯云服务器部署vue前端项目(Ubuntu+vue+nginx+nodejs+npm)

一、安装nodejs和npm sudo apt-get nodejs sudo apt-get npm 但是在安装npm后&#xff0c;输入npm --version时&#xff0c;会报错 此时&#xff0c;需要升级nodejs的版本&#xff0c;执行下面的两条命令 wget -qO- https://deb.nodesource.com/setup_16.x | sudo -E bash - …

兄弟兄弟,在git中的使用.gitignore忽略不想要提交的文件,了解一下呗

1. .gitignore的作用 在实际的工程项目中&#xff0c;除了项目本身的代码文件、配置文件外&#xff0c;还有一些文件或目录并不需要纳入版本管理中&#xff0c;如idea工具会在工程根目录生成一个.idea的目录、工程编译后生的target等。因此在提交代码文件的时候需要自动把这些目…

医学图像处理-安装nibabel包命令

医学图像处理-安装nibabel包命令问题与解决方案问题与解决方案 直接使用 pip install nibabel 出现如下报错&#xff1a; 尝试使用conda 命令安装&#xff0c;conda官网查命令&#xff1a; conda install -c conda-forge nibabel conda install -c conda-forge/label/gcc7 ni…

编译 - Make 命令教程 - 学习/实践

1.应用场景 主要用于学习和使用make命令进行软件编译安装。 2.学习/操作 1.文档阅读 Make 命令教程 - 阮一峰的网络日志 Make- GNU Project - Free Software Foundation 2.整理输出 2.1 什么是make命令&#xff1f; Make 是最常用的构建工具&#xff0c;诞生于1977年&#xff…

python正则表达式实战——获取图片

我最近自学了一段时间爬虫&#xff0c;感觉挺有意思的&#xff0c;逛网页的时候&#xff0c;无意间发现了一个壁纸网站&#xff0c;我就萌生了一个想法&#xff0c;看能不能下下来&#xff0c;说干就干。 前言 目标网站&#xff1a;首先我们要知道我们的目标位置。 编程语言…

Java Spring-AOP动态代理-JDK和CGlib实现

Java Spring-AOP CGlib和JDK动态代理实现 编码是为了解决生活中的问题&#xff0c;譬如现在我想用筷子吃饭的时候看手机&#xff0c;那么首先会有两个对象。 现在如果是面向对象编程思想&#xff0c;我们会new一个筷子对象&#xff0c;new一个手机对象&#xff0c;然后先调用…

Linux 命令 —— feh

Linux 命令 —— feh1. 介绍2. 模式-重要&#xff01;2.1 模式对比3. 参数说明3. 常见使用方式1. 介绍 本教程基于版本 feh 2.23.2. 命令&#xff1a;feh feh是一个基于模式的图像查看器。虽然它也可以由(图形化的)文件管理器启动以查看图像&#xff0c;但它特别针对需要快速…

函数传址,但无法改变xy数据问题

目录 问题 正确代码 两者区别 开启调试 设置监视的变量 逐过程调试 在自定义函数中调试 跳出自定义函数 对正确的代码进行调试 进入自定义函数 跳出自定义函数 为什么说编译器有问题 问题 今天遇到一个很有意思的问题分享一下。他写了一个交换数据的函数&#xf…

看一眼就会的k8s权限管理手把手教学

Kubernetes Kubernetes使用RBAC授权Kubernetes一、API概述1.Role 和 ClusterRole1.RoleBinding和ClusterRoleBinding二、使用步骤&#xff08;Role及RoleBinding为例&#xff09;1、创建user用户证书2、创建集群、用户1、创建集群配置文件2、创建基于集群和新用户的上下文3、给…

【java进阶02:抽象类和接口】类与类之间的关系 抽象类与接口的区别

目录 抽象类 接口 抽象类 什么是抽象类 /*类————>对象 &#xff1a;实例化 对象————>类 &#xff1a;抽象抽象类:1、什么是抽象类&#xff1f;类和类之间具有共同特征&#xff0c;将这些共同特征提取出来&#xff0c;形成的就是抽象类类本身是不存在的&…