本速成笔记基于B站up主柴柴的 React入门到实战
React是专注于构建用户界面的JavaScript库
和Vue以及Angular并称前端三大框架
特点
声明式UI(JSX)
抛弃命令式的繁琐实现,写UI就像写普通HTML
组件化
通过搭积木的方式拼成完整页面
通过组件的抽象可以增加复用能力并提高可维护性
跨平台
React既可以开发Web应用也可以使用同样的语法开发原生应用(react-native)如安卓和IOS应用,甚至可以用于开发VR应用,更像是一个元框架
使用React脚手架创建一个React项目
1 使用脚手架创建项目
$ npx create-react-app react-basic
npx create-react-app是固定命令,create-react-app是脚手架名称
该脚手架库是基于react库的模版项目,包含所有需要的配置(语法检查,jsx编译,devServer等)
项目的整体技术架构是react + webpack + es6 + eslint
使用脚手架开发项目特点是模块化,组件化,工程化
react-basic是语义化的项目名称
npx命令会临时安装create-react-app包,在初始化完成后自动删除,我们不需要全局安装create-react-app
$ yarn start
or
$ npm start
2 目录调整
src
目录是code进行项目开发的目录
package.json
中有两个核心库: react, react-dom
package.json
主要作用是
现在我们需要删除src目录下的所有文件除了App.js根组件,index.js以及index.css
index.js文件作为项目入口文件
import React from 'react'
import ReactDOM from 'react-dom'
import './index.css'
// 引入根组件App
import App from './App'
// 通过调用ReactDOM的render方法渲染App根组件到id是root的dom节点上
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
)
1 概述
JSX是JavaScript XML
表示在JS代码中书写HTML结构(页面UI结构)
JSX是JS的语法扩展,浏览器默认不识别
需要脚手架内置的 @babel/plugin-transform-react-jsx 包解析JSX语法
2 在JSX中使用JS表达式
语法: { JS 表达式 }
const name = "Zane"
<h1>Hello, {name}</h1> // Hello, Zane
可以使用的表达式
if语句, switch-case语句, 变量声明语句等不是表达式,不能出现在{}中
3 JSX列表渲染
页面的构建离不开列表结构
vue中使用的是vue-for,react使用的是数组的map方法
const songs = [
{ id: 1, name: 'Melody' },
{ id: 2, name: 'Sorry' },
{ id: 3, name: 'Love song' }
]
function App() {
return (
<div className="App">
<ul>
{
songs.map(item => <li>{item.name}</li>)
}
</ul>
</div>
)
}
export default App
4 JSX条件渲染
根据是否满足条件生成HTML结构,比如Loading效果
可以使用 三元运算符 或 逻辑与运算符
const flag = true
function App() {
return (
<div className="App">
{/* 条件渲染字符串*/}
{flag ? "react" : "vue"}
{/*条件渲染标签/组件*/}
{flag ? <span>this is span</span> : null}
</div>
)
}
export default App
5 JSX样式处理
在JSX中实现css样式处理
function App() {
return (
<div className="App">
<div style={{ color: 'red' }}>this is a div</div>
</div>
)
}
export default App
const styleObj = {
color: red
}
fucntion App() {
return (
<div className="App">
<div style={ styleObj }>this is a div</div>
</div>
)
}
export default App
// app.css
.title {
font-size: 30px;
color: blue;
}
import './app.css'
const showTitle = true
function App() {
return (
<div className="App">
<div className={ showTitle ? 'title' : ''}>this is a div</div>
</div>
)
}
export default App
6 JSX注意点
基于vscode配置格式化工具,提高开发效率