>웹 프론트엔드 >프런트엔드 Q&A >새로 추가된 React의 라이프사이클은 무엇입니까?

새로 추가된 React의 라이프사이클은 무엇입니까?

青灯夜游
青灯夜游원래의
2022-03-21 18:28:223015검색

새로 추가된 라이프 사이클은 다음과 같습니다. 1. 상태 업데이트 프로세스를 제어하는 ​​데 사용되는 getDerivedStateFromProps 2. 최신 DOM 데이터를 읽는 데 사용되는 getSnapshotBeforeUpdate.

새로 추가된 React의 라이프사이클은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, 반응 버전 17.0.1, Dell G3 컴퓨터.

React를 배울 때 생명주기는 매우 중요합니다. 생명주기의 각 구성요소를 이해하면 고성능 구성요소를 작성하는 데 큰 도움이 됩니다.

React 생명주기는 3가지 상태로 나누어집니다. 2. 업데이트 3. 파괴

React 17 새로운 라이프사이클

1. 라이프사이클 폐지

공식 웹사이트 문서에서는 이러한 라이프사이클을 사용하는 코드가 향후 버그를 생성할 가능성이 더 높다고 지적합니다. 특히 비동기 렌더링 버전의 React 버전

향후 비동기 렌더링 메커니즘으로 인해 버전 17에서 제거될 수명 주기 후크 기능

componentWillMount

componentWillRecieveProps

componentWIllUpdate

2. 새로운 수명 주기

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)

는 componentWillReceiveProps를 대체하는 데 사용되며 상태를 업데이트하는 소품 프로세스를 제어하는 ​​데 사용할 수 있습니다. 업데이트가 필요하지 않으며 매번 null을 반환합니다.

초기 마운트 또는 후속 업데이트에 관계없이 렌더링 전에 호출됩니다. 이는 componentWillReceiveProps와 다릅니다(상위 구성 요소가 다시 렌더링을 발생시키는 경우에만 호출됩니다

간단한 이해는 의미합니다. 이 라이프 사이클의 함수인 props에서 상태를 가져오는 것은 실제로 들어오는 props를 상태에 매핑합니다.

getDerivedStateFromProps는 정적 함수입니다. 즉, 이 함수는 이를 통해 클래스의 속성에 액세스할 수 없으며 그렇지 않습니다. 대신에 nextProps를 전달해야 하며 제공된 매개변수는 새로 전달된 props를 기반으로 상태를 판단하고 매핑하는 데 사용됩니다. , null을 반환해야 합니다. 이 반환 값은 필요하므로 함수 끝에 작성해 보세요.

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()

최신 변경 사항이 DOM에 커밋되기 전에 요소를 변경하기 전에 구성 요소가 현재 값을 얻을 수 있도록 이 라이프 사이클에서 반환된 모든 값은 구성요소DidUpdate()로 전달됩니다.

이 함수는 업데이트 후 DOM이 호출되기 전에 호출됩니다. 업데이트됨 최신 DOM 데이터를 읽는 데 사용됩니다. 반환 값은 최신 렌더링 데이터가 제출될 때 DOM에 제공되기 직전에 호출됩니다. 변경되기 전에 구성 요소의 데이터를 가져옵니다

componendDidCatch(error, info)🎜🎜구성 요소가 componentDidCatch 수명 주기를 정의하면 오류 경계가 됩니다(오류 경계는 렌더링 중에 오류를 포착합니다. 라이프 사이클 메소드와 그 아래 전체 트리의 생성자에서 🎜🎜 try catch를 사용하는 것과 마찬가지로 오류가 직접 발생하지 않으며 애플리케이션의 가용성이 보장됩니다)🎜🎜🎜🎜3. 기본 사용🎜🎜🎜rrreee🎜 [관련 추천:🎜Redis 동영상 튜토리얼🎜]🎜

위 내용은 새로 추가된 React의 라이프사이클은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.