9. 生命周期
This commit is contained in:
parent
ec0298cf63
commit
8448575d8c
@ -2,33 +2,61 @@ import React from "react";
|
|||||||
import PropTypes from "proptypes"
|
import PropTypes from "proptypes"
|
||||||
// 模块化 css, 后缀 .module.css
|
// 模块化 css, 后缀 .module.css
|
||||||
import SonComponentCss from "./SonComponent.module.css"
|
import SonComponentCss from "./SonComponent.module.css"
|
||||||
export default class SonComponent extends React.PureComponent {
|
export default class SonComponent extends React.Component {
|
||||||
state = {
|
state = {
|
||||||
msg: "SonComponent Msg",
|
msg: "SonComponent Msg",
|
||||||
showChildrenBorder: true,
|
showChildrenBorder: true,
|
||||||
childrenClass: []
|
childrenClass: []
|
||||||
}
|
}
|
||||||
|
|
||||||
// constructor(props) {
|
constructor(props) {
|
||||||
// super(props);
|
super(props);
|
||||||
// console.log(props)
|
console.log("[constructor] SonComponent")
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
// 相当于 vue mounted
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.changeChildrenClass()
|
this.changeChildrenClass()
|
||||||
console.log('[挂载] SonComponent 组件后执行的操作');
|
console.log('[挂载] SonComponent 组件后执行的操作');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 优化生命周期
|
||||||
|
// 手动实现 类似 React.PureComponent 的功能
|
||||||
|
// 如果返回值为 false 则不会调用 render 更新组件
|
||||||
|
shouldComponentUpdate(nextProps, nextState, nextContext) {
|
||||||
|
console.log("[shouldComponentUpdate] SonComponent")
|
||||||
|
console.log("修改前 => ", this.state, "修改后 =>", nextState)
|
||||||
|
|
||||||
|
// 是否需要更新组件
|
||||||
|
// return !Object.keys(this.state).reduce((prev,key)=> {
|
||||||
|
// return prev?this.state[key] === nextState[key]:prev;
|
||||||
|
// }, true)
|
||||||
|
for(let key in this.state){
|
||||||
|
console.log(key, this.state[key], nextState[key], this.state[key] !== nextState[key])
|
||||||
|
if(this.state[key] !== nextState[key]){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 相当于 vue updated
|
||||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||||
// 当count更新时执行的操作
|
// 当count更新时执行的操作
|
||||||
console.log('SonComponent 组件后更新,执行的操作:', this.state);
|
console.log('[componentDidUpdate] SonComponent 组件后更新,执行的操作:', this.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 相当于 vue unmount
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
console.log('[卸载] SonComponent 组件 前执行的操作');
|
console.log('[卸载] SonComponent 组件 前执行的操作');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getDerivedStateFromProps(props, state){
|
||||||
|
console.log("[getDerivedStateFromProps] SonComponent", props, state)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
switchChildrenBorder = () => {
|
switchChildrenBorder = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
...this.state,
|
...this.state,
|
||||||
@ -51,6 +79,7 @@ export default class SonComponent extends React.PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
console.log("[render] SonComponent")
|
||||||
return <div style={{border: '1px solid', width: '80%', overflow: 'auto'}}>
|
return <div style={{border: '1px solid', width: '80%', overflow: 'auto'}}>
|
||||||
子组件
|
子组件
|
||||||
|
|
||||||
|
@ -35,9 +35,10 @@ export default function SonComponent2(props= {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function revokeChangeMsg(){
|
function revokeChangeMsg(){
|
||||||
|
let count = state.count
|
||||||
setState({
|
setState({
|
||||||
...state,
|
...state,
|
||||||
// count: state.count > 0 ? --state.count : 0,
|
count: count > 0 ? --count : 0,
|
||||||
tmp: props.changeMsg(state.tmp)
|
tmp: props.changeMsg(state.tmp)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
11
src/index.js
11
src/index.js
@ -6,9 +6,14 @@ import reportWebVitals from './reportWebVitals';
|
|||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||||
root.render(
|
root.render(
|
||||||
<React.StrictMode>
|
/**
|
||||||
<App />
|
* 严格模式: 只在开发模式中生效, 打包后会去除
|
||||||
</React.StrictMode>
|
* 检测危险操作, 比如废弃和不推荐的api
|
||||||
|
* 重复执行2次生命周期函数, 检测额外的副作用 如 render
|
||||||
|
*/
|
||||||
|
// <React.StrictMode>
|
||||||
|
<App/>
|
||||||
|
// </React.StrictMode>
|
||||||
);
|
);
|
||||||
|
|
||||||
// If you want to start measuring performance in your app, pass a function
|
// If you want to start measuring performance in your app, pass a function
|
||||||
|
Loading…
Reference in New Issue
Block a user