为什么 componentDidMount 在 HOC 中触发,而 componentDidUpdate 不触发?

Why does componentDidMount fires in a HOC where as componentDidUpdate does not fire?

我正在关注关于高阶组件 (HOC) 的 reactjs 教程。我想要一个 HOC 在 props 改变时记录 props。

import React, { useState } from 'react';

function logProps(WrappedComponent) {
  return class extends React.Component {
    componentDidMount() {
      console.log("Component was mounted");
    }
    componentDidUpdate(prevProps) {
      console.log("Current props: ", this.props);
      console.log("Previous props: ", prevProps);
    }
    render() {
      // Wraps the input component in a container, without mutating it. Good!
      return <WrappedComponent {...this.props} />
    }
  }
}

class CustomDivElement extends React.Component{
  render(){
  return <div>{this.props.text}</div>
  }
}

function App(props) {
  const [text, setText] = useState("");
  const EnhancedComponent = logProps(CustomDivElement);
  return (
    <div tabIndex="0" className="App ui container">
      <input
      type="text"
      value={text}
      onChange={(e) => setText(e.target.value)} />
      <EnhancedComponent text={text} />
    </div>
  )
}

export default App

一开始我以为是因为我用的是HOC。所以我引入了另一个生命周期方法,它是 componentDidMount 并且它正在触发。 componentDidUpdate 没有发射,这是为什么?

因为您在每次渲染时卸载组件,所以组件不会进入 componentDidUpdate 生命周期。

function App(props) {
  // Remount on every render
  const EnhancedComponent = logProps(CustomDivElement);
  ...
}

相反,当使用 HOC 或任何其他组件时,您希望挂载它一次:

// export default logProps(CustomDivElement)
const EnhancedComponent = logProps(CustomDivElement);

function App(props) {
  const [text, setText] = useState("");
  return (
    <div tabIndex="0" className="App ui container">
      <input
      type="text"
      value={text}
      onChange={(e) => setText(e.target.value)} />
      <EnhancedComponent text={text} />
    </div>
  )
}