React基础原理(state数据,setState方法,获取页面Dom节点,事件绑定,生命周期)

React基础原理(state数据,setState方法,获取页面Dom节点,事件绑定,生命周期)

React组件内部state数据

当state中的数据发送变化以后,会调用render方法重新渲染VDOM。

state相当于重写,因为在react中,就有这个

setState方法

为了解决多次设值state产生的多次渲染,会使用节流方法多次设值进行合并处理,相当于vue中的this.$nextTick()方法

如果需要得到重新赋值后的值,应该在回调中去拿

经典使用场景:第二次ajax请求,依赖第一次ajax的请求,

constructor(经常不用)

为了能够继承componet的构造函数,必须使用super()

React页面获取DOM节点的方法

两种方法:

一:直接绑定,在js代码中,this.refs.ref名字

this.refs.ref名字

二:使用createRef方法创建一个REF对象,使用值绑定方式,可以直接获取节点

使用方法:
state = {
	node = creatRef()
}
render() {
	return(
		<div ref={this.state.node}></div>
	)
}
React事件绑定

名字全部使用小驼峰。页面上书写事件的方法,不能使用functiion,会造成this丢失,需使用箭头函数,如果使用function那么就用bind将this指出去

func(a,b,c,d){
        console.log(a,b,c,d)
        this.setState({
            num: this.state.num + 1
        })
    }
    render() {
        return (
            <div>
                <button onClick={this.func.bind(this,1,2,3)}>{this.state.num}</button>
            </div>
        )
    }

绑定的是事件方法对象,不是一个函数执行结果

**参数传递:**使用bind,进行参数传递,不绑定任何为null,事件正在进行值传递的时候,出了传递本身的值,还会把事件本身作为最后一个参数进行传递

this.handleclick.bind(this,要传的参数)  handleclick(传过来的参数,event)
React组件的生命周期(函数组件没有生命周期,只有类组件有)

挂载

当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:

constructor() 一个组件最开始执行的生命周期

getDerivedStateFromProps()

render()

//即将完成挂载的生命周期,尽量不要使用

componentWillMount()

componentDidMount() 完成挂载的生命周期,完成echarts的初始化,事件绑定,用的最多,需要在这个生命周期,初始化页面数据,配合this.setState({},()=>{})
在这里插入图片描述

更新

当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:

shouldComponentUpdate(nextprops,nextstate)

组件更新之前调用(组件接受新的props或者state)。函数会返回一个布尔值,true才会更新组件。

注意:最好判断一下新旧两个props/state是否相同,相同则返回false不要触发更新。这样就不用生成新的dom树和旧的进行diff算法对比,从而优化性能。*(因为父组件render()调用会使得子组件render()也被执行,引起性能问题)*
在这里插入图片描述
render()

注意:render()这个生命周期在更新的时候也会执行,所以不能在render()生命周期中,进行数据更改,会形成一个递归,并且 没有出口

componentDidUpdate()

更新完成后

卸载

当组件从 DOM 中移除时会调用如下方法:

componentWillUnmount()

一般移出我们的监听事件和我们的echarts对象,定时器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值