React核心⼊⻔-lesson1

news/2024/7/15 18:54:31 标签: react.js, 前端

自学React从入门到精通,从使用到写源码

  • React⼊⻔
    • 课堂⽬标
    • 资源
    • 起步
      • ⽂件结构
      • ⽂件结构⼀览
    • React和ReactDom
    • JSX
      • 使⽤JSX
    • 组件
      • 组件的两种形式
        • class组件
        • function组件
      • 组件状态管理
        • 类组件中的状态管理
        • 函数组件中的状态管理
    • 事件处理
    • 组件通信
      • Props属性传递
      • context
      • redux
    • ⽣命周期
      • 变更缘由
      • 新引⼊了两个新的⽣命周期函数:
      • getDerivedStateFromProps ,
      • getSnapshotBeforeUpdate
      • 验证⽣命周期
    • 后续展望
    • 回顾

课堂⽬标

  1. create-react-app使⽤
  2. 掌握组件使⽤
  3. 掌握JSX语法
  4. 掌握setState
  5. 理解事件处理、组件⽣命周期
  6. 掌握组件通信各种⽅式

资源

  1. react
  2. create-react-app

起步

  1. 安装官⽅脚⼿架:npm install -g create-react-app
  2. 创建项⽬:create-react-app lesson1
  3. 启动项⽬:npm start
  4. 暴露配置项:npm run eject
    ⽂件结构

⽂件结构⼀览

 |—— README.md                         ⽂档
 |—— public                                     静态资源
 | 		  |—— favicon.ico
 |        |—— index.html
 |        |—— manifest.json
 |—— src                                          源码
 |—— |—— App.css
         |—— App.js                            根组件
         |—— App.test.js
         |—— index.css                      全局样式
         |—— index.js                         ⼊⼝⽂件
         |—— logo.svg
         |—— serviceWorker.js           pwa⽀持
 |—— package.json                         npm 依赖

env.js⽤来处理.env⽂件中配置的环境变量

 // node运⾏环境:development、production、test等
 const NODE_ENV = process.env.NODE_ENV;
 // 要扫描的⽂件名数组
 var dotenvFiles = [
        `${
    paths.dotenv}.${
    NODE_ENV}.local`, // .env.development.local
         `${
    paths.dotenv}.${
    NODE_ENV}`,         // .env.development
        NODE_ENV !== 'test' && `${
    paths.dotenv}.local`, // .env.local
        paths.dotenv, // .env
 ].filter(Boolean);

 // 从.env*⽂件加载环境变量
 dotenvFiles.forEach(dotenvFile => {
   
        if (fs.existsSync(dotenvFile)) {
   
                require('dotenv-expand')(
                require('dotenv').config({
   
                        path: dotenvFile,
                })
        );
     }
 });

实践⼀下,修改⼀下默认端⼝号,创建.env⽂件
PORT=8080

webpack.config.js 是webpack配置⽂件,开头的常量声明可以看
出cra能够⽀持ts、sass及css模块化

 // Check if TypeScript is setup
 const useTypeScript =
 fs.existsSync(paths.appTsConfig);
 // style files regexes
 const cssRegex = /\.css$/;
 const cssModuleRegex = /\.module\.css$/;
 const sassRegex = /\.(scss|sass)$/;
 const sassModuleRegex = /\.module\.(scss|sass)$/;

React和ReactDom

删除src下⾯所有代码,新建index.js

 import React from 'react';

 import ReactDOM from 'react-dom';

 // 这⾥怎么没有出现React字眼?

 // JSX => React.createElement(...)
 ReactDOM.render(<h1>Hello React</h1>, document.querySelector('#root'));

 React负责逻辑控制,数据 -> VDOM
 ReactDom渲染实际DOM,VDOM -> DOM
 React使⽤JSX来描述UI
 ⼊⼝⽂件定义,webpack.config.js
 entry: [
        // WebpackDevServer客户端,它实现开发时热更新功能
        isEnvDevelopment && require.resolve('react-dev-utils/webpackHotDevClient'),
        // 应⽤程序⼊⼝:src/index
        paths.appIndexJs,
 ].filter(Boolean),

JSX

JSX是⼀种JavaScript的语法扩展,其格式⽐较像模版语⾔,但事实
上完全是在JavaScript内部实现的。

JSX可以很好地描述UI,能够有效提⾼开发效率,体验JSX

JSX实质就是React.createElement的调⽤,最终的结果是
React“元素”(JavaScript对象)。

  const jsx = <h2>react study</h2>;
  ReactDOM.render(jsx,document.getElementById('root'));

使⽤JSX

表达式{}的使⽤,index.js

const name = "react study";
const jsx = <h2>{
   name}</h2>;

函数也是合法表达式,index.js

const user = {
    firstName: "tom", lastName: "jerry"};
function formatName(user) {
   
	return user.firstName + " " + user.lastName;
}
const jsx = <h2>{
   formatName(user)}</h2>;

jsx是js对象,也是合法表达式,index.js

const greet = <p>hello, Jerry</p>
const jsx = <h2>{
   greet}</h2>;

条件语句可以基于上⾯结论实现,index.js

const showTitle = true;
const title = name ? <h2>{
   name}</h2> : null;
const jsx = (
	<div>
		{
   /* 条件语句 */}
		{
   title}
	</div>
)

http://www.niftyadmin.cn/n/5437248.html

相关文章

ZnO 阀片的非线性 U-I特性

EAK氧化锌阀片的非线性电压-电流(U-I)特性是它在作为限压元件的实际应用中最为重要的性能。 U-I特性曲线中有一个明显的转折点,即拐点。当作用在阀片上的电压低于拐点电压时,流过阀片的电流密度很小&#xff0c;一般小于1μA/cm”,电压与电流接近线性关系;当电压高于拐点电压时…

vue3 计算属性(computed)和监听属性(watch)的异同

计算属性(computed) //使用计算属性 {{fullName}} //使用方法 {{fullName() }}const firstNameref("杰克") const lastNameref("麻子") //计算属性 const fullNamecomputed(()>firstName.value"-"lastName.value) //方法 const fullName()&g…

【Leetcode-19.删除链表的第N个节点】

题目详情&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1…

合并两个有序数组(力扣)

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…

显示android设备所以已安装App 可点击启动、搜索

app名称*表示此app是系统应用&#xff0c;复制到项目后清单文件注册便可启动&#xff0c;此activity无需任何xml文件。 android 11系统以上清单需要配置以下权限&#xff1a; <uses-permission android:name"android.permission.QUERY_ALL_PACKAGES" /> p…

论文笔记:液体管道泄漏综合检测与定位模型

0 简介 An integrated detection and location model for leakages in liquid pipelines 1 摘要 许多液体&#xff0c;如水和油&#xff0c;都是通过管道运输的&#xff0c;在管道中可能发生泄漏&#xff0c;造成能源浪费、环境污染和对人类健康的威胁。本文描述了一种集成的…

SQLiteC/C++接口详细介绍之sqlite3类(十八)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十七&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;一&#xff09; ​ 56.sqlite3_update_hook 函数功能&am…

蓝桥杯算法基础(20):(快速排序的其他优化)java版

三点中值法 选主元三点中值法左&#xff0c;中&#xff0c;右&#xff0c;三个位置&#xff0c;取中间值作为主元&#xff0c;与第一个元素交换 public static int partition(int[] A,int p,int r){int pivotA[p];//优化&#xff0c;在p,r,mid之间&#xff0c;选一个中间作为主…