后端的React之路(八)

77 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

前言

昨天学习了React的元素和组件的相关概念,今天就来继续学习组件有关的相关知识:生命周期、事件处理等~

生命周期

React提供了很多组件相关的钩子函数,以便我们实现各种自定义功能。

一个组件的生命周期通常被分为三部分:

  • Mounting(挂载):已插入真实 DOM
  • Updating(更新):正在被重新渲染
  • Unmounting(卸载):已移出真实 DOM

下面是官方的一张生命周期图

img

通常我们常用的构造函数也就是:componenDidMountcomponentWillUnmountrender

下面来学习一下常用的钩子函数

  • constructor():该函数就是我们所定义的构造函数,他会在React挂载之前被调用,通常用来初始化参数和接受props。
  • render():该方法是每个class组件都一定要实现的方法,用来返回相关元素。
  • componenDidMount():该方法在组件挂载进dom树后执行。
  • componentWillUnmount():在组件被卸载或者销毁之前会调用该方法。
class MyLifeCycle extends React.Component {
    constructor(props) {
        super( props );
        console.log( "执行constructor" );
    }
​
    render() {
        console.log( "执行render()" );
        return (
            // DOM 
        );
    }
​
    componentDidMount() {
        console.log( "执行componentDidMount()" );
    }
​
    componentWillUnmount() {
        console.log( "componentWillUnmount()" );
​
    }
}
const root = ReactDOM.createRoot( document.getElementById( "root" ) );
root.render( <MyLifeCycle/> )
​
// 执行constructor
// 执行render()
// 执行componentDidMount()

React事件处理

React的元素同样可以添加相关事件处理,不过需要注意事件的命名是采用小驼峰命名方法,例如:

  • 传统dom元素:onclick(),onfocus(),onkeydown()
  • React元素:onClick(),onFocus(),onKeyDown()

需要注意当我们定义事件处理函数时,需要处理this参数,例如下面的代码

class MyEventHandle extends React.Component {
    constructor(props) {
        super( props );
        this.state = {
            name:"default"
        }
    }
​
    handle(){
        this.setState(state=>({
            name:"Tom"
        }))
    }
​
​
    render() {
        return (
                <div onClick={this.handle}>hello</div>
        );
    }
}
const root = ReactDOM.createRoot( document.getElementById( "root" ) );
root.render( <MyEventHandle /> )
​
// 会抛出TypeError: Cannot read properties of undefined (reading 'setState')

这是由于组件函数不会默认绑定this参数,因此通常我们的方法定义使用lambda语法来实现this绑定

    handle = ()=>{
        this.setState(state=>({
            name:"Tom"
        }))
    }

当我们需要将事件的值传给处理函数时,也通常是使用lambda的写法

<button onClick={(e) => this.handle(e)}>处理元素</button>

学习资料