React生命周期

拼搏现实的明天。 2022-05-21 02:30 377阅读 0赞

转载:React数据获取为什么一定要在componentDidMount里面调用?

https://segmentfault.com/q/1010000008133309

这与React组件的生命周期有关,组件挂载时有关的生命周期有以下几个:

  • constructor()
  • componentWillMount()
  • render()
  • componentDidMount()

上面这些方法的调用是有次序的,由上而下,也就是当说如果你要获取外部数据并加载到组件上,只能在组件”已经”挂载到真实的网页上才能作这事情,其它情况你是加载不到组件的。

componentDidMount方法中的代码,是在组件已经完全挂载到网页上才会调用被执行,所以可以保证数据的加载。此外,在这方法中调用setState方法,会触发重渲染。所以,官方设计这个方法就是用来加载外部数据用的,或处理其他的副作用代码。

constructor被调用是在组件准备要挂载的最一开始,所以此时组件尚未挂载到网页上。

componentWillMount方法的调用在constructor之后,在render之前,在这方法里的代码调用setState方法不会触发重渲染,所以它一般不会用来作加载数据之用,它也很少被使用到。

一般的从后台(服务器)获取的数据,都会与组件上要用的数据加载有关,所以都在componentDidMount方法里面作。虽然与组件上的数据无关的加载,也可以在constructor里作,但constructor是作组件state初绐化工作,并不是设计来作加载数据这工作的,所以所有有副作用的代码都会集中在componentDidMount方法里。


补充一下,Redux作初始数据载入时,是可以不需透过React组件的生命周期方法,大致的方式如下代码:

  1. import React from 'react'
  2. import ReactDOM from 'react-dom'
  3. import { createStore } from 'redux'
  4. import { Provider } from 'react-redux'
  5. import App from './App'
  6. // reducer
  7. function items(state = [], action) {
  8. switch (action.type) {
  9. case 'LOAD_ITEMS':
  10. return [...action.payload]
  11. default:
  12. return state
  13. }
  14. }
  15. // 创建store
  16. const store = createStore(items)
  17. fetch('http://localhost:8888/items', {
  18. method: 'GET'
  19. })
  20. .then((response) => {
  21. // ok代表状态码在200-299
  22. if (!response.ok) throw new Error(response.statusText)
  23. return response.json()
  24. })
  25. .then((itemList) => {
  26. // 作dispatch动作,载入外部数据完成之后
  27. store.dispatch({ type: 'LOAD_ITEMS', payload: itemList })
  28. })
  29. .catch((error) => { throw new Error(error.message) })
  30. // React组件加载到真实DOM上
  31. ReactDOM.render(
  32. <Provider store={store}>
  33. <App />
  34. </Provider>, document.getElementById('root'))
  35. 为何可以这样作的原因,是Reduxstore中的状态有一个最初始的值(reducer上传参里的默认值),组件先初始化完成,接著异步的fetchpromise语法,在作完外部数据加载后,发送动作出来,此时reducer更动store里的状态,react-redux绑定器会触发React组件的重渲染,所以组件上数据会自动更新。

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读

    相关 react生命周期

    只有类组件才有生命周期,函数组件没有生命周期。 页面渲染期: constructor 构造函数 UNSAFE\_componentWillMount 组件将要挂载

    相关 react生命周期

    前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始

    相关 react生命周期

    react生命周期,一直只关心自己常用的那几个,虽然基本能解决99%的问题,但是当被问到的时候,说的不清不楚还是让我很惭愧,所以今天我就专门来梳理一下react的生命周期 1