React生命周期方法之componentDidMount的使用

 更新时间:2023年06月06日 14:26:47   作者:star_zone  
这篇文章主要介绍了React生命周期方法之componentDidMount的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

React生命周期方法componentDidMount

1. componentDidMount() 这个生命周期方法应该是用的最多的,一般用在进入页面后,数据初始化,这种情况下,跟model中的 subscription方法作用是一样的。

但是当你数据初始化方法都写在subscription方法时,当你改了页面访问路径,model里面的path没改过来,初始化方法就调不到了。

但是要是把数据初始化接口都放在componentDidMount函数里,只要进入页面就会去执行。

2.当你有种情况:一个父页面,一个编辑或新增(编辑新增通常为同一个页面)页被父页面引用:

{
  editVisible ? <PartDesignEdit form={form} editVisible={editVisible} editValue={editValue} designList={designList} colseEdit={this.colseEdit} setLoading={this.setLoading} /> : null
}
{/* <PartDesignEdit form={form} editVisible={editVisible} editValue={editValue} designList={designList} colseEdit={this.colseEdit} setLoading={this.setLoading} /> */}

上图是在父页面引用编辑页,编辑页是个Modal,通过editVisible控制,1  和  2 这两种方式看起来是一样的

但是当有时候你可能碰到这样的情况:

1.就是在编辑页面,你修改完数据后,关掉编辑页,第二次打开后,发现还是上次修改后的内容。

2.或者,本来新增页面某些输入框的值是有初始值的,被编辑一次之后再进去,初始值变上次修改后的值

这时就有区别了。

下图是每次进入到编辑页面,就重置初始值(根据自己业务):

我们想,只要在每次进入到编辑页的时候,去重置页面的数据不就好了,所以可以通过在编辑/新增页面的componentDidMount方法中,去每次的设置页面的初始值。

但是,当你用图1的 2方式,你会发现,编辑页面只有第一次加载时会被执行,后面再进去,还是出现值重置不了的问题。

但是,截图一种的方式1就不一样了,编辑页打开(editVisible=true)时编辑页才被引用,editVisible=false时,不被引用,所以,每次editVisible=true时,相当于编辑页每次都是第一次加载,所以componentDidMount方法中的方法每次都会被执行,这样问题就解决了。

这个可以用在其他相似的情形。

React生命周期(getDerivedStateFromProps,componentDidMount)

之前的开发过程中没有遇到太多复杂的功能,所以就没有使用到react的生命周期。最近在mars3d React基础项目开发中涉及了,生命周期的使用。

componentDidMount

先看一下官方解释

https://zh-hans.reactjs.org/docs/react-component.html#componentdidmount

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里。如需通过网络请求获取数据,此处是实例化请求的好地方。

这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅

你可以在 componentDidMount() 里直接调用 setState()。它将触发额外渲染,但此渲染会发生在浏览器更新屏幕之前。如此保证了即使在 render() 两次调用的情况下,用户也不会看到中间状态。请谨慎使用该模式,因为它会导致性能问题。

通常,你应该在 constructor() 中初始化 state。如果你的渲染依赖于 DOM 节点的大小或位置,比如实现 modals 和 tooltips 等情况下,你可以使用此方式处理

使用场景介绍:目前场景比较简单,就是初始化的时候要渲染dom,加载数据。

当我的组件被插入到 DOM 树之后,就会执行 componentDidMount 生命周期,后面就不会再次执行这个函数。

getDerivedStateFromProps

在使用getDerivedStateFromProps生命周期之前我使用的是componentWillReceiveProps生命周期,但是最新的react会有警告,推荐使用getDerivedStateFromProps,具体两者的区别可以自己查阅资料了解一下。

先说一下我的使用场景:

父组件中数据发生变化,要求子组件可以监听到数据发生变化,并且将数据重新渲染。

class RoamLineList extends Component<any, any> {
  constructor(props) {
    super(props)
    this.state = {
      tableData: [], // 表格,
    }
//
demo() {
this.state.setState({
 tableData:[
      {
        id:1,
        key:1,
        name:"测试"
      }
         ]
})
}
  render() {
    return <RoamRoute flyData={this.state.tableData}></RoamRoute>
    }

执行demo方法向tableData中添加一条数据,在子组件中监听到。

每次执行demo()方法子组件都可以通过getDerivedStateFromProps生命周期获取数据

static getDerivedStateFromProps(nextProps: any) {
    const data = nextProps.flyData
    return {
      roamLineData: [...data]
    }
  }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • React useContext与useReducer函数组件使用

    React useContext与useReducer函数组件使用

    useContext和useReducer 可以用来减少层级使用, useContext,可以理解为供货商提供一个公共的共享值,然后下面的消费者去接受共享值,只有一个供货商,而有多个消费者,可以达到共享的状态改变的目的
    2023-02-02
  • React中组件通信的几种主要方式

    React中组件通信的几种主要方式

    React知识中一个主要内容便是组件之间的通信,以下列举几种常用的组件通信方式,通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-10-10
  • react实现简单的拖拽功能

    react实现简单的拖拽功能

    这篇文章主要为大家详细介绍了react实现简单的拖拽功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • React反向代理与CSS模块化的使用案例

    React反向代理与CSS模块化的使用案例

    这篇文章主要介绍了React反向代理与CSS模块化的使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • React中的useMemo 和 useEffect 执行顺序

    React中的useMemo 和 useEffect 执行顺序

    在 React 组件的渲染过程中,useMemo 和 useEffect 的执行顺序是不同的,本文给大家介绍React中的useMemo 和 useEffect 哪个先执行,感兴趣的朋友一起看看吧
    2025-01-01
  • 浅谈react路由传参的几种方式

    浅谈react路由传参的几种方式

    这篇文章主要介绍了浅谈react路由传参的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • React自定义hooks同步获取useState的最新状态值方式

    React自定义hooks同步获取useState的最新状态值方式

    这篇文章主要介绍了React自定义hooks同步获取useState的最新状态值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • React中useRef hook的简单用法

    React中useRef hook的简单用法

    useRef是react的自定义hook,它用来引用一个不需要渲染的值,这篇文章介绍useRef的简单用法,感兴趣的朋友一起看看吧
    2024-01-01
  • antd之RangePicker设置默认值方式

    antd之RangePicker设置默认值方式

    这篇文章主要介绍了antd之RangePicker设置默认值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • React如何使用错误边界(Error Boundaries)捕获组件错误

    React如何使用错误边界(Error Boundaries)捕获组件错误

    在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉,下面小编就来为大家介绍一下如何利用它捕获组件错误吧
    2025-03-03

最新评论