React入门 v1.0
第一部分 开始React程序
一、构建 React 开发环境
1.使用 Vite 创建项目
npm create vite@latest
>>输入模块名
>>选择 JavaScript + SWC
cd <模块名>
npm i #安装相关依赖
npm run dev #运行SWC:是一个可扩展的基于 Rust 的平台,用于下一代快速开发工具,比 Babel 更快
2.使用 create-react-app 构建 React 开发环境
npm install -g create-react-app #安装create-react-app
create-react-app <my-app> #创建一个名为my-app的项目3.npm下载慢解决方式
npm install -g cnpm --registry=https://registry.npm.taobao.org
#之后使用cnpm进行操作二、目录结构
|-my-app
|-index.html
|-README.md
|-package.json
|-node_modules
|-<lib>
|-public #不会进行编译处理
|-src #开发目录,会进行编译处理
|-App.css
|-App.jsx
|-index.css
|-main.jsx #主入口文件|-my-app/
|-README.md
|-package.json
|-node_modules/
|-public/
|-favicon.ico
|-index.html
|-manifest.json #指定了开始页面index.html
|-src/
|-App.css
|-App.js
|-App.test.js
|-index.css
|-index.js #入口文件
|-logo.svg三、构建 React 项目
1.编译构建React项目
npm run build2.无法打开index.html解决方法
{
"name": "my-app",
"version": "0.1.0",
"homepage": "./", #添加这一行
"private": true,
...
}第二部分 React基础
一、React重要思想
1.页面组件化
组件化是指将界面划分为可重用、独立的模块。每个React组件都有自己的状态(state)和属性(props),它们用于描述组件的行为和显示内容。通过组件化,你可以将界面拆分为多个小块,使得代码更加可维护和可复用。
function ModuleName() {
return (
<element></element>
)
}2.数据驱动视图
数据驱动视图是指React使用数据来驱动界面的更新。当组件的状态或属性发生变化时,React会自动重新渲染相应的部分界面。这种机制减轻了手动处理DOM更新的负担,并且使得界面保持与数据同步。你只需要关注数据的变化,而不用关心如何更新DOM。
function App() {
const [count, setCount] = useState(0)
return (
<div>
<button onClick={() => setCount(count + 1)}>计数</button>
{count}
</div>
)
}3.React库和React框架的区别
React (也称为React.js或ReactJS)是一个自由及开放源代码的前端JavaScript工具库,用于基于UI组件构建用户界面;React 框架则是通过脚手架工具搭建的一套完善前端环境,包括:路由、状态管理、数据获取、第三方的UI组件库和第三方Hooks库等的完整应用程序
4.React严格模式简介
- 检查组件是否为纯函数
- 尽早发现useEffect中的错误
- 警告过时的API
二、ESLint与Prettier
1.ESLint(代码规范插件)
运行(可以直接使用):npm run lint(可以通过.eslintrc.cjs文件进行配置警告级别等)
下载插件(运行时提示):npm i vite-plugin-selint
2.Prettier(代码格式化插件)
Prettier插件:WebStorm自带无需下载,VSCode需要下载
.prettierrc文件:可以规范项目代码,适用于多人协作
三、React模块与ReactDOM模块
1.React模块
作用:①核心功能 ②组件
2.ReactDOM模块
作用:①操作浏览器DOM ②react-dom/client ③react-dom/server
第三部分 JSX语法
一、JSX基本语法
HTML转JSX网站:https://magic.reactjs.net/htmltojsx.htm
1.JSX简介
JSX 是JavaScript 语法扩展,可以让你在 JavaScript 文件中书写类似 HTML 的标签
- JSX浏览器是不认识的,所以利用脚手架中的SWC或Babel进行编译,转换成浏览器识别的代码
- JSX 和 React 是相互独立的东西。但它们经常一起使用,但你可以单独使用它们中的任意一个,JSX 是一种语法扩展,而 React 则是一个JavaScript 的库
2.创建函数组件
支持表达式写法与声明式写法两种写法
function App () {
return (
<div>Hello App</div>
)
}
export default App //将组件对外暴露const App = () => {
return (
<div>Hello App</div>
)
}
export default App //将组件对外暴露3.注意要点
- JSX中原生HTML标签通常使用小写,自定义组件名通常使用大写开头,且标签必须闭合
- JSX中
class为关键字,应该修改为className,label标签中,for应当改为htmlFor - 属性应当使用小驼峰式命名(自定义属性除外)
- 可以在
{}中书写JavaScript表达式、属性或注释,如:{ "foo".toUpperCase() }/{ /**/ } - JSX中
return语句中只能返回一个唯一根节点,若有多个节点,可以通过添加一个新的div元素或者Fragment组件(可以简写为<>,不会进行渲染)将多个节点包含
import { Fragment } from 'react'
function App () {
return (
<Fragment>
<div>div1</div>
<div>div2</div>
</Fragment>
)
}二、JSX中使用样式
1.行内样式
{/*基本语法*/}
<div style={{width:"100px", height:"100px", backgroundColor:"blue"}}>this is a div</div>
{/*定义为变量使用*/}
const myStyle={width:"100px", height:"100px", backgroundColor:"red"}
<div style={myStyle}>this is a div</div>2.全局样式
全局样式在任何一个关联的地方引入之后,通过指定className全局有效
命名:Xxx.css
import 'Xxx.css'
function App () {
return (
<div className="box">box为Xxx.css文件中定义的样式</div>
)
}3.局部样式
命名:Xxx.module.css
import <styleName> from 'Xxx.module.css'
function App () {
return (
<div className={<styleName>.box}>box为Xxx.module.css文件中定义的样式</div>
)
}使用局部样式时,若css中属性使用横线分割命名,如head-title-box,有两种解决方案
- 使用中括号,如下例
import <styleName> from 'Xxx.module.css'
function App () {
return (
<div className={<styleName>['head-title-box']}>使用横线分割命名的样式</div>
)
}- 使用Vite脚手架提供的将下划线分割命名转换为小驼峰命名的方式进行处理
export default defineConfig({
plugins: [
react()
],
//添加代码,支持驼峰命名
css: {
modules:{
localsConvention:'camelCase'
}
}
})import <styleName> from 'Xxx.module.css'
function App () {
return (
<div className={<styleName>.headTitleBox}>使用横线分割命名的样式</div>
)
}