组件的生命周期
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
var Demo = React.createClass({
getDefaultProps: function () {
console.log("获取默认属性值");
return {
name: "world",
};
},
getInitialState: function () {
console.log("初始化状态值");
return {
isSelect: false,
};
},
componentWillMount: function () {
console.log("将要挂载组件");
},
render: function () {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
},
});
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
</script>
</body>
</html>
静态属性替代getDefaultProps
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
static defaultProps = {
name: "world",
};
constructor(props) {
super(props);
this.state = {
isSelect: false,
};
console.log("初始化状态值");
}
componentDidMount() {
console.log("组件已挂载");
}
render() {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
}
}
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
</script>
</body>
</html>
使用ES6 Class替代React.createClass
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
static defaultProps = {
name: "world",
};
constructor(props) {
super(props);
this.state = {
isSelect: false,
};
}
render() {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
}
componentDidMount() {
console.log("已经挂载组件");
}
shouldComponentUpdate() {
console.log("是否可以更新组件");
return true;
}
componentDidUpdate() {
console.log("已经更新组件");
}
}
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
ReactDOM.render(<Demo name="四儿" />, document.getElementById("example"));
</script>
</body>
</html>
componentWillUnmount在React 16中仍可安全使用,无需修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
static defaultProps = {
name: "world",
};
constructor(props) {
super(props);
this.state = {
isSelect: false,
};
}
render() {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
}
componentDidMount() {
console.log("已经挂载组件");
}
shouldComponentUpdate() {
console.log("是否可以更新组件");
return true;
}
componentDidUpdate() {
console.log("已经更新组件");
}
componentWillUnmount() {
console.log("将要移除组件");
}
}
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
ReactDOM.render(<Demo name="四儿" />, document.getElementById("example"));
</script>
</body>
</html>
UNSAFE_componentWillMount
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
static defaultProps = {
name: "world",
};
constructor(props) {
super(props);
this.state = {
isSelect: false,
};
}
UNSAFE_componentWillMount() {
console.log("将要挂载组件");
}
render() {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
}
componentDidMount() {
console.log("已经挂载组件");
}
shouldComponentUpdate() {
console.log("是否可以更新组件");
return true;
}
componentDidUpdate() {
console.log("已经更新组件");
}
componentWillUnmount() {
console.log("将要移除组件");
}
}
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
ReactDOM.render(<Demo name="四儿" />, document.getElementById("example"));
ReactDOM.unmountComponentAtNode(document.getElementById("example"));
</script>
</body>
</html>
组件的生命周期完整过程
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>组件的生命周期</title>
</head>
<body>
<div id="example"></div>
<script src="https://cdn.jsdelivr.net/npm/react@16.14.0/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.14.0/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.23.2/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
static defaultProps = {
name: "world",
};
constructor(props) {
super(props);
console.log("初始化状态值");
this.state = {
isSelect: false,
};
}
UNSAFE_componentWillMount() {
console.log("将要挂载组件");
}
render() {
console.log("渲染组件");
return <h1>Hello, {this.props.name}!</h1>;
}
componentDidMount() {
console.log("已经挂载组件");
}
UNSAFE_componentWillReceiveProps() {
console.log("将要接收到属性值");
}
shouldComponentUpdate() {
console.log("是否可以更新组件");
return true;
}
UNSAFE_componentWillUpdate() {
console.log("将要更新组件");
}
componentDidUpdate() {
console.log("已经更新组件");
}
componentWillUnmount() {
console.log("将要移除组件");
}
}
ReactDOM.render(<Demo name="三儿" />, document.getElementById("example"));
ReactDOM.render(<Demo name="四儿" />, document.getElementById("example"));
</script>
</body>
</html>