React项目指导
使用webpack需要安装的依赖
webpack
,webpack-cli
,react
,react-dom
babel-loader
,@babel/core
,@babel/preset-env
,@babel/preset-react
- 设置
.babelrc
,{"presets": ["@babel/preset-env","@babel/preset-react"]}
设置
scripts
:"dev": "webpack --mode development",
"build": "webpack --mode production"设置
webpack-dev-server
:devServer: {
compress: true,
port: 9000,
hot: true
},
"start": "webpack-dev-server --config webpack.config.js"设置
performance
:performance: {
hints: false
}
Component
基本组件
let title = <h1>Hello, world!</h1>
ReactDOM.render(title,document.getElementById('root'))动态组件
import React from 'react';
import ReactDOM from 'react-dom';
let displayTime = () => {
let nowTime = (
<div>
<span>现在时间:{new Date().toLocaleTimeString()}</span>
</div>
);
ReactDOM.render(t
nowTime,
document.getElementById('root')
);
};
setInterval(displayTime, 1000);class
组件构建器import React, {Component} from 'react';
import ReactDOM from 'react-dom';
class HelloTitle extends Component {
render() {
return <h1>Hello,World!</h1>
}
}
ReactDOM.render(
<HelloTitle/>,
document.getElementById('root')
);props
属性import React, {Component} from 'react';
import ReactDOM from 'react-dom';
class HelloTitle extends Component {
render() {
return <h1>Hello,{this.props.name}!</h1>
}
}
let titleDiv = (
<div>
<HelloTitle name="React"/>
<HelloTitle name="World"/>
</div>
);
ReactDOM.render(
titleDiv,
document.getElementById('root')
);props
多层使用import React, {Component} from 'react';
import ReactDOM from 'react-dom';
class HelloTitle extends Component {
render() {
return <h1>Hello,{this.props.name}!</h1>
}
}
class HelloDiv extends Component {
render() {
return <div><HelloTitle name={this.props.name}/></div>
}
}
ReactDOM.render(
<HelloDiv name="React"/>,
document.getElementById('root')
);组件复用
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
class HelloTitle extends Component {
render() {
return <h1 style={this.props.style}>{this.props.content}</h1>
}
}
class HelloDiv extends Component {
render() {
return <div>
<HelloTitle content="比较大的字" style={{'fontSize': 18}}/>
<HelloTitle content="比较小的字" style={{'fontSize': 12}}/>
</div>
}
}
ReactDOM.render(
<HelloDiv/>,
document.getElementById('root')
);
Component的状态state和生命周期
state属性
constructor(props) { |
组件构建完成后先执行的动作,componentDidMount()
:
componentDidMount() { |
setState()修改状态值
this.setState({time: new Date().toLocaleTimeString()}) |
生命周期
- 在
constructor
中初始化组件内部的资料。 - 使用
render()
在网页上输出组件内容。 - 输出后会执行
componentDidMount()
进行一次调用。 - 当组件内部的
state
值被修改时执行componentDidUpdate()
。 - 当组件被移除时会执行
componentWillUnmount()
的内容一次。
componentDidMount()
- Component已经
render
到实体DOM阶段完成的时候触发; - 此
method
只会被呼叫一次; - 在这裡可以
setState()
,并会再次重新render
、component
一次; - 可以放入具有
side effect
的function
,如setInterval
、呼叫API等等。
componentWillUnmount()
- Component即将从实体DOM阶段移除「之前」的时候触发;
- 也是只会被呼叫一次;
- 不可以在这裡使用
setState()
; - 也可以放入具有
side effect
的function
。
class Clock extends Component { |
component各阶段的生命周期方法
- 挂载(
Mounting
):组件一开始呈现到真实网页的过程
class LifeCycle extends Component { |
- 更新(Updating):使用者的操作中,组件的状态和属性被改变
class LifeCycle extends Component { |
- 卸载(Unmounting):组件要移除真实DOM的阶段
class LifeCycle extends Component { |
catch error
class ErrorBoundary extends Component { |
上面就是component
可以使用的生命周期方法,最常用主要是这些:
constructor()
render()
componentDidMount()
compoinentDidUpdate()
componentWillUnmount()
Component的事件处理
- 取得触发事件的DOM
class InputGender extends Component { |
class HelloTitle extends Component { |
用绑定的state取得输入资料
class EasyForm extends Component { |
受控组件
class EasyForm extends Component { |
非受控组件
class EasyForm extends Component { |
refs操作DOM
class App extends Component { |
实例:TODOLIST
TodoList.js
class TodoList extends Component { |
TodoForm.js
class TodoForm extends Component { |
TodoItem.js
class TodoItem extends Component { |
赏
使用微信打赏
使用支付宝打赏
雅致寓于高阁渔舟唱晚,古典悠然;
格调外发园林绿树萦绕,馥郁清香。
扫描二维码,分享此文章