# React
**Repository Path**: SeteVII/react
## Basic Information
- **Project Name**: React
- **Description**: react框架的学习和使用
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-01-05
- **Last Updated**: 2023-10-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# react版本问题
<18
```javascript
// 引入react核心库
import React from 'react';
// 引入ReactDOM
import ReactDom from 'react-dom'
//引入App组件
import App from './App';
ReactDom.render(
,document.getElementById('root')
)
```
18+
```javascript
// 引入react核心库
import React from 'react';
// 引入ReactDOM
import ReactDOM from 'react-dom/client';
//引入App组件
import App from './App';
//渲染App组件到页面
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
// React.StrictMode检查App及App子组件内容是否合理
);
```
# React.StrictMode
React.StrictMode检查App及App子组件内容是否合理
```javascript
// 引入react核心库
import React from "react";
// 引入ReactDOM
import ReactDOM from "react-dom";
//引入App组件
import App from "./App";
// 渲染App组件到页面
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
// React.StrictMode检查App及App子组件内容是否合理
);
```
# react组件三大属性
## state
```javascript
1. 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示
2. 初始化指定:
constructor() {
super()
this.state = {
stateName1 : stateValue1,
stateName2 : stateValue2
}
}
3. 读取显示:
this.state.stateName1
4. 更新状态-->更新界面 :
this.setState({stateName1 : newValue})
```
## props
```javascript
所有组件标签的属性的集合对象
给标签指定属性, 保存外部数据(可能是一个function)
在组件内部读取属性: this.props.propertyName
作用: 从目标组件外部向组件内部传递数据
对props中的属性值进行类型限制和必要性限制
Person.propTypes = {
name: React.PropTypes.string.isRequired,
age: React.PropTypes.number.isRequired
}
扩展属性: 将对象的所有属性通过props传递
```
## refs
```javascript
组件内包含ref属性的标签元素的集合对象
给操作目标标签指定ref属性, 打一个标识
在组件内部获得标签对象: this.refs.refName(只是得到了标签元素对象)
作用: 找到组件内部的真实dom元素对象, 进而操作它
```
# 生命周期
```javascript
1. 组件的三个生命周期状态:
Mount:插入真实 DOM
Update:被重新渲染
Unmount:被移出真实 DOM
2. 生命周期流程:
* 第一次初始化显示: ReactDOM.render(, containDom)
constructor()
componentWillMount() : 将要插入回调
render() : 用于插入虚拟DOM回调
componentDidMount() : 已经插入回调
* 每次更新state: this.setState({})
componentWillReceiveProps(): 接收父组件新的属性
componentWillUpdate() : 将要更新回调
render() : 更新(重新渲染)
componentDidUpdate() : 已经更新回调
* 删除组件: ReactDOM.unmountComponentAtNode(div): 移除组件
componentWillUnmount() : 组件将要被移除回调
3. 常用的方法
render(): 必须重写, 返回一个自定义的虚拟DOM
constructor(): 初始化状态, 绑定this(可以箭头函数代替)
componentDidMount() : 只执行一次, 已经在dom树中, 适合启动/设置一些监听
```