React是一个用于构建用户界面的JavaScript库。
用户界面:HTML页面(前端);
React主要用来写HTML页面,或构建Web应用;
如果从MVC的角度来看,React仅仅是视图层(V),也就是只负责视图的渲染,而并非提供了完整的M和C的功能。
你只需要描述UI(HTML)看起来是怎么样,就跟写HTML一样
React只负责渲染UI,并在数据变化时更新UI
const jsx = <div className="app">
<h1>Hello React! 动态变化数据: {count}</h1>
</div>
组件是React最重要的内容
组件表示页面中的部分内容
组合、复用多个组件,可以实现完整的页面功能
使用React可以开发Web应用
使用React可以开发移动端原生应用( react-native )
使用React可以开发VR(虚拟现实)应用(react360)
安装命令:npm i react react-dom
react包是核心,提供创建元素、组件等功能
react-dom包提供DOM相关功能等
1、引入react和react-dom两个js文件
<script src="./node_ modules/react/umd/react.development.js"></ script>
<script src="./node_ modules/react-dom/umd/react-dom.development.js"></ script>
2、创建react元素
3、渲染react元素到页面中
<div id="root"></div>
<script>
const title = React.createElement('hl', null, 'Hello React')
ReactDOM.render(title, document.getElementById('root'))
</script>
react.createElement()
// 返回值: react元素
// 参数1: 要创建的react元素名称,同html名称是一样的
// 参数2: 该react元素的属性
// 第3个及其以后的参数: 元素节点或子节点
const el = React.createElement('h1', {title:'标题'}, 'Hello React')
ReactDOM.render()
// 3、渲染React元素
// 参数1: 要渲染的react元素
// 参数2:挂载点(DOM对象,用于指定渲染到页面中的位置)
ReactDOM.render(el, document.getElementById('root'))
初始化项目命令:npx create-react-app my-app(项目名字)
(推荐使用),create-react-app
是脚手架名字,不能更改;
npm init react-app my-app
;
yarn create react-app my-app
;
yarn是Facebook发布的包管理器,可以看作npm的替代品,功能与npm相似;具有快速、可靠和安全的特点
出现Happy hacking
表示成功
启动项目,在项目根目录执行命令npm start
或yarn start
(安装有yarn的使用yarn start),在此之前,需要使用命令cd my-app
进入根目录
目的:提升包内提供的命令行工具的使用体验
原来:先安装脚手架包,再使用这个包中提供的命令
现在:无需安装脚手架包,就可以直接使用这个包提供的命令
1、导入react和react-dom两个包;
import React from 'react'
import ReactDOM from 'react-dom'
2、调用React.createElement()
方法创建react元素;
3、调用ReactDOM.render()
方法渲染react元素到页面中。
1.繁琐不简洁。
2.不直观,无法一眼看出所描述的结构。
3.不优雅,用户体验不爽。
React.createElement(
'div',
{className: 'shopping-list'},
React.createElement('h1', null, 'shopping List'),
React.createElement(
'ul' ,
nul1,
React.createElement('li', null, 'Instagram'),
React.createElement('li', null, 'WhatsApp')
)
)
JSX是JavaScript XML的简写,表示在JavaScript代码中写XML ( HTML )格式的代码。
优势:声明式语法更加直观、与HTML结构相同,降低了学习成本、提升开发效率。
<div className="shopping-list">
<h1>Shopping List</h1>
<ul >
<li> Instagram</li>
<li>WhatsApp</li>
</ul>
</div>
JSX是react的核心
1.使用JSX语法创建react元素
// 使用JSX语法,创建react元素:
const title = <h1>Hello JSX</h1>
2.使用ReactDOM.render0方法渲染react元素到页面中
// 渲染创建好的React元素
ReactDOM.render(title, root)
注意:
/>
结束// 使用小括号包裹JSX
const title = (< h1 > Hello JSX < /h1>)
数据存储在JS中
语法:{JavaScript表达式}
注意:语法中是单大括号,不是双大括号
const name = 'Jack'
const dv = (<div>你好,我叫{name}</div>)
注意点:
const h1 = <h1>JSX</h1>
const dv = (<div>嵌入表达式:{h1}</div>)
根据不同的条件来渲染不同的JSX结构
可以发现,写JSX的条件渲染与我们之前编写代码的逻辑是差不多的,根据不同的判断逻辑,返回不同的 JSX结构,然后渲染到页面中
可以使用if/else或三元运算符或逻辑与运算符来实现
// 条件渲染
const isLoading = true
const loadData = () => {
if (isLoading) {
return <div>数据加载中,请稍后...</div>
}
return (
<div>数据加载完成,此处显示加载后的数据</div>
)
}
// 三元表达式
// const loadData = () => {
// return isLoading ? 数据加载中,请稍后... : 数据加载完成,此处显示加载后的数据
// }
// 逻辑与运算符
const loadData = () => {
return isLoading && <div>数据加载中,请稍后...</div>
}
const dv = (<div>{loadData()}</div>)
const title = (
<h1>
条件渲染:{dv}
</h1>
)
ReactDOM.render(title, document.getElementById('root'))
map ()
方法// 列表渲染
const songs = [
{ id: 1, name: '1' },
{ id: 2, name: '2' },
{ id: 3, name: '3' }
]
const list = (
<ul>
{songs.map(item => <li key={item.id} > {item.name}</li>)}
</ul >
)
ReactDOM.render(list, document.getElementById('root'))
在style里面我们通过对象的方式传递数据
这种方式比较的麻烦,不方便进行阅读,而且还会导致代码比较的繁琐
<h1 style={{color:'red', backgroundcolor:'skyblue'}}>
JSX的样式处理
</h1>
创建CSS文件编写样式代码
在js中进行引入,然后设置类名即可
<h1 className="title">
JSX的样式处理
</h1>