如 React 文档中所述,应谨慎使用此 API,因为可以使用更简单的替代方案来实现相同的结果。这是我理解并完全同意的。
但是,作为一个独立的 API,在某些情况下它应该是强制性的。令我困惑的是,即使是文档中提到的这个 API 的“罕见用例”也不能令人信服它是完全需要的。
以第二个用例为例:https ://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-props-change
此生命周期方法仅用于在渲染新道具之前清除陈旧数据。但是我们不能只清除componentDidUpdate中的陈旧数据吗?即使它会在道具比较相等的情况下触发不必要的重新渲染,但它是值得接受的解决方案。
componentDidUpdate(prevProps, prevState) {
if (prevProps.id !== this.props.id) {
this.setState({ externalData: null });
this._loadAsyncData(this.props.id);
}
}
我稍微修改了一下以显示这两种解决方案产生相同的最终结果:https ://codesandbox.io/embed/sharp-paper-p5hv2?fontsize=14&hidenavigation=1&theme=dark
您认为在哪里适合使用此 API?