Les cycles de vie nouvellement ajoutés sont : 1. getDerivedStateFromProps, utilisé pour contrôler le processus de mise à jour de l'état des accessoires ; 2. getSnapshotBeforeUpdate, utilisé pour lire les dernières données DOM ;
L'environnement d'exploitation de ce tutoriel : système Windows 7, React version 17.0.1, ordinateur Dell G3.
Le cycle de vie est très important lors de l'apprentissage de React. Une fois que nous aurons compris chaque composant du cycle de vie, il sera d'une grande aide pour écrire des composants hautes performances.
Le cycle de vie de React est divisé en trois états : 1. Initialisation. 2. Mise à jour 3. Destruction
1. Abolition du cycle de vie
Le document du site officiel souligne que le code utilisant ces cycles de vie sera plus susceptible de produire des bugs à l'avenir versions de React, en particulier pour la version de rendu asynchrone
En raison du mécanisme de rendu asynchrone à l'avenir, la fonction de hook de cycle de vie qui sera supprimée dans la version 17
composantWillMount
composantWillRecieveProps
composantWIllUpdate
2. Le nouveau cycle de vie
getDerivedStateFromProps(nextProps, prevState)
getDerivedStateFromProps(nextProps, prevState)
用于替换componentWillReceiveProps,可以用来控制 props 更新 state 的过程;它返回一个对象表示新的 state;如果不需要更新,返回 null 即可
在每次渲染之前都会调用,不管初始挂载还是后面的更新都会调用,这一点和componentWillReceiveProps不同(只有当父组件造成重新渲染时才调用
简单的理解就说从props中获取state,这个生命周期的功能实际上就是将传入的props映射到state上面
getDerivedStateFromProps是一个静态函数,也就是这个函数不能通过this访问到class的属性,也并不推荐直接访问属性。而是应该通过参数提供的nextProps以及prevState来进行判断,根据新传入的props来映射到state
如果props传入的内容不需要影响到你的state,那么就需要返回一个null,这个返回值是必须的,所以尽量将其写到函数的末尾
static getDerivedStateFromProps(nextProps, prevState) { const {type} = nextProps; // 当传入的type发生变化的时候,更新state if (type !== prevState.type) { return { type, }; } // 否则,对于state不进行任何操作 return null; }
getSnapshotBeforeUpdate()
在最近的更改被提交到DOM元素前,使得组件可以在更改之前获得当前值,此生命周期返回的任意值都会传给componentDidUpdate()。
用于替换 componentWillUpdate,该函数会在update后 DOM 更新前被调用,用于读取最新的 DOM 数据,返回值将作为 componentDidUpdate 的第三个参数
在最新的渲染数据提交给DOM前会立即调用,它让你在组件的数据可能要改变之前获取他们
componendDidCatch(error, info)
getDerivedStateFromProps est une fonction statique, c'est-à-dire que cette fonction ne peut pas accéder aux propriétés de la classe via cela, et ce n'est pas le cas. Il est recommandé d'accéder directement aux propriétés. Au lieu de cela, il doit transmettre les nextProps et les paramètres fournis. prevState est utilisé pour juger et mapper à l'état en fonction des accessoires nouvellement transmisSi le contenu transmis par les accessoires n'a pas besoin d'affecter votre état. , alors vous devez renvoyer une valeur nulle. Cette valeur de retour est nécessaire, alors essayez de l'écrire à la fin de la fonction
class A extends React.Component { // 用于初始化 state constructor() {} // 用于替换 `componentWillReceiveProps` ,该函数会在初始化和 `update` 时被调用 // 因为该函数是静态函数,所以取不到 `this` // 如果需要对比 `prevProps` 需要单独在 `state` 中维护 static getDerivedStateFromProps(nextProps, prevState) {} // 判断是否需要更新组件,多用于组件性能优化 shouldComponentUpdate(nextProps, nextState) {} // 组件挂载后调用 // 可以在该函数中进行请求或者订阅 componentDidMount() {} // 用于获得最新的 DOM 数据 getSnapshotBeforeUpdate() {} // 组件即将销毁 // 可以在此处移除订阅,定时器等等 componentWillUnmount() {} // 组件销毁后调用 componentDidUnMount() {} // 组件更新后调用 componentDidUpdate() {} // 渲染组件函数 render() {} }
getSnapshotBeforeUpdate()
est utilisé pour remplacer composantWillUpdate. Cette fonction sera appelée après la mise à jour et avant le DOM. mis à jour. Il est utilisé pour lire les dernières données du DOM. La valeur de retour sera utilisée comme troisième paramètre de composantDidUpdate 🎜🎜 lorsque les dernières données de rendu seront soumises immédiatement avant de les transmettre au DOM, ce qui vous permettra de le faire. récupérez les données du composant avant qu'elles ne changent🎜🎜componendDidCatch(error, info)
🎜🎜Si un composant définit le cycle de vie du composantDidCatch, il deviendra une limite d'erreur (la limite d'erreur détectera les erreurs lors du rendu, dans les méthodes de cycle de vie et dans le constructeur de l'arborescence entière en dessous d'eux, 🎜🎜 Tout comme avec try catch, l'erreur ne sera pas générée directement, disponibilité garantie de l'application)🎜🎜🎜🎜 Utilisation de base🎜🎜🎜rrreee🎜. [Recommandations associées : 🎜Tutoriel vidéo Redis🎜]🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!