React核心⼊⻔-lesson1

自学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.developmentNODE_ENV !== 'test' && `${paths.dotenv}.local`, // .env.localpaths.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 setupconst useTypeScript =fs.existsSync(paths.appTsConfig);// style files regexesconst 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负责逻辑控制,数据 -> VDOMReactDom渲染实际DOM,VDOM -> DOMReact使⽤JSX来描述UI⼊⼝⽂件定义,webpack.config.jsentry: [// WebpackDevServer客户端,它实现开发时热更新功能isEnvDevelopment && require.resolve('react-dev-utils/webpackHotDevClient'),// 应⽤程序⼊⼝:src/indexpaths.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.mzph.cn/news/754052.shtml

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

相关文章

Python:filter过滤器

filter() 是 Python 中的一个内置函数&#xff0c;用于过滤序列&#xff0c;过滤掉不符合条件的元素&#xff0c;返回由符合条件元素组成的新列表。该函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;序列的每个元素作为参数传递给函数进行判定&…

行为型-观察者模式

文章目录 基本概念定义使用场景代码实现 延伸阅读java监听机制spring监听机制 基本概念 定义 观察者模式是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 观察者模式…

电脑msvcp140_1.dll丢失的解决方法,总结5种可靠的方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp1401.dll丢失”。这个DLL文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说至关重要。这个错误通常会导致某些应用程序无…

摄影第一课

色彩 红色绿色黄色 红色蓝色洋红 蓝色绿色青色 冷暖色 摄影基础 选择合适的前景&#xff0c;增加照片层次感 测光拍摄&#xff0c;照片有亮和暗的地方&#xff0c;立体感更强 拍摄技巧 拍摄倒影 手机靠近水面&#xff0c;距离越近拍到的倒影越多适当降低曝光、获得更加准…

SWUST OJ 961: 进制转换问题

题目描述 建立顺序栈或链栈&#xff0c;编写程序实现十进制数到二进制数的转换。 输入 输入只有一行&#xff0c;就是十进制整数。 输出 转换后的二进制数。 样例输入 10 样例输出 1010 参考程序 #include<iostream> using namespace std; #define maxsize 10…

springboot 动漫周边商城的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

20240316-算法复习打卡day25||● 216.组合总和III● 17.电话号码的字母组合

216.组合总和III class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(int targetSum, int k, int sum, int startIndex) {if (path.size() k) {if (sum targetSum) result.push_back(path);}for (int i startIndex…

6语言交易所/多语言交易所php源码/微盘PHP源码

6语言交易所PHP源码&#xff0c;简单测试了一下&#xff0c;功能基本都是正常的。 由于是在本地测试的运行环境的问题&#xff0c;K线接口有点问题&#xff0c;应该在正式环境下是OK的。 源码下载地址&#xff1a;6语言交易所/多语言交易所php源码/微盘PHP源码.zip 程序截图…

比特币,区块链及相关概念简介(四)

目录 数学难题指的是什么哈希计算什么是去中心化去中心化的优势加密货币加密货币的特点智能合约平台零知识证明&#xff08;Zero-knowledge Proofs&#xff09;该系列文章链接 以下内容结合了chatgpt 3.5以及网络文章。 用于学习记录。 简介&#xff1a; 介绍了数学难题&#x…

构建用户身份基础设施,推动新能源汽车高质量发展

随着市场进入智能电动汽车时代&#xff0c;车企们发现&#xff0c;在激烈竞争的市场中不断增长&#xff0c;并不是一件容易的事。《麻省理工科技评论》&#xff0c;前段时间写了一篇报道&#xff1a;中国是如何称霸电动汽车世界的&#xff1f;“过去两年&#xff0c;中国电动汽…

洛谷_P1152 欢乐的跳_python写法

思路&#xff1a; 这道题我用到了集合的互异性来判断这组数字是否满足条件我觉得是比较有效一点的。 data list(map(int,input().split())) data data[1:] l [i for i in range(1,len(data))] s [] for i in range(len(data)-1):s.append(abs(data[i] - data[i1]))if set(…

[python3] 设置多进程名称并且在ps命令中可见

Centos7 系统 setproctitle 是一个 Python 模块&#xff0c;用于设置进程标题&#xff08;process title&#xff09;。进程标题是在系统中用来标识进程的名字&#xff0c;通常会显示在系统级的进程管理工具&#xff08;如 ps 命令&#xff09;中。通过设置进程标题&#xff0c…

断言assert是什么?

assert是什么&#xff1f; assert断言&#xff0c;是一个被定义在<assert.h>头文件中的一个宏&#xff0c;而不是一个函数。 可以用来检查数据的合法性&#xff0c;但是频繁的调用极大影响了程序的性能&#xff0c;增加了额外的开销。可以通过#define NDEBUG来禁用asse…

解释MVC和MVVM架构模式

一、解释MVC和MVVM架构模式 MVC和MVVM都是常见的前端架构模式&#xff0c;用于抽象分离并解决特定问题。这两种模式在结构上具有一定的相似性&#xff0c;但在细节和数据处理方式上存在一些差异。 MVC&#xff0c;即Model-View-Controller&#xff0c;是一种用于应用程序分层…

阿里云-零基础入门NLP【基于机器学习的文本分类】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路TF-IDF介绍TF-IDF 机器学习分类器TF-IDF LinearSVCTF-IDF LGBMClassifier 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)&#xff0c;一开始看这块其实挺懵的&am…

分享一个不错的three.js开源项目

项目将three.js相关内容封装为相应库 很值得学习&#xff0c;可以模仿项目学习three.js vue-vite-three.js threejs-park: 基于vue3&#xff0c;threeJS智慧园区 threejs-park

JavaScript中的Hoisting

概要 本文在Javascript的Execution Context文章基础上&#xff0c;从代码执行的角度来谈谈变量提升&#xff0c;已经为什么let和const的变量不能进行变量提升。 代码分析 var 关键字定义的变量 下面的代码并不会报错&#xff0c;可以正常执行。 console.log(a) var a 0;代…

JS的一些方便遍历数组的API函数

这些函数有的时候在学到后面的内容会遇到&#xff0c;看一些前端的视频的时候突然出现这些函数看到有点懵&#xff0c;现在就整合一下&#xff0c;然后以后看到这些函数就知道是干什么的了 1、箭头函数 没学完js的必须得先了解箭头函数 //它两一样 function fn(){console.lo…

【P5735】【深基7.例1】距离函数

【深基7.例1】距离函数 题目描述 给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1​,y1​),(x2​,y2​),(x3​,y3​)&#xff0c;坐标值是实数&#xff0c;且绝对值不超过 100.00&#xff0c;求围…

图文并茂!在Oracle VM VirtualBox上安装Ubuntu虚拟机的详细步骤指南

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…