[译]React 的生命周期的使用场景
[译]React 的生命周期的使用场景
原文链接:React Lifecycle Methods- how and when to use them 作者:Scott DomesFollow Front-End/Mobile Developer @ MuseFind. 上名这个图片,就是 React 组件的生命周期,从形成 (pre-mounting)到销毁 (unmounting)的过程。 React 的优雅之处就在于,它把复杂的 UI 分解成很小的部分。 我们不仅仅可以划分我们的应用,而且我们还可以定制我们每一个组件。 通过组件的生命周期方法,我们可以控制当UI的每个微小部分渲染,更新,考虑重新渲染,然后完全消失时会发生什么事情。 让我们开始吧! componentWillMount您的组件将很快就会出现在屏幕上面。这个大块的渲染功能与其所有精美的 JSX 一样,即将被调用。那你想做什么? 答案是... 可能不是很多。 但是 关于 componentWillMount 的事情是,没有组件可以玩,所以你不能做任何涉及DOM的事情。(译者:因为还没渲染组件) 此外,自从您的组件的构造函数( constructor )被调用以来,没有任何变化,但是,无论如何,您应该在其中设置组件的默认配置。 export default calss Sidebar extends Component { constructor(props) { super(props) this.state = { analyticsOpen: false,requirementsOpen: false,barndInfoOpen: false } } } 现在您的组件处于默认位置,几乎所有的东西都应该由其余的组件代码来处理,而不需要额外的生命周期方法。 例外是只能在运行时完成的任何设置,说白了也就是连接到外部 API 。举个栗子,如果您的应用程序使用Firebase,则需要在应用程序首次挂载(mounting)时进行设置。 但关键是,这样的配置应该在应用程序的最高级别组件(根组??件)。 这意味着99%的组件应该不能使用 您可能会看到使用 接下来,更有用的方法是: componentDidMount现在我们在说话您的组件在那里,挂载了并准备好使用了。怎么办? 这里是您加载数据的位置。我会让 Tyler McGinnis 解释为什么:
基本上,你可以在这里做任何刚刚因为没有 DOM 而不能做的设置,并且可以获取你所需要的全部数据。 最常见的用例: 启动 componentWillReceiveProps我们的组成部分做得很好,突然之间,一大堆新的 很有可能一些由父组件的 在我们的组件对新的 <img alt="componentWillReceiveProps" src="https://cdn-images-1.medium.com/max/800/1*u3rXB0qKor51Qb_R1laPjw.png" 现在,我们正在处于一个很有趣的地方,我们可以访问下一个 下面这些是我们在
下面是一个例子。假设我们在上面提到,我们有一个 <canvas> 元素。假设我们根据 ps` ,如果百分比发生变化,我们想重新绘制网格。以下是代码: componentWillReceiveProps( nextProp ) { if(this.props.percent !== nextProps.percent) { this.setUpCirCle(nextProps.percent) } } 注意:在初始渲染时不调用 componentWillReceiveProps 。 最常见的用例:根据特定的 shouldComponentUpdate现在我们的组件越来越紧张了。 我们有新的 但是我们的组件有点焦虑,首先要求许可。 这是我们所需要的 —— shouldComponentUpdate(nextProps,nextState) { return this.props.engagement !== nextProps,engagement || nextState.input !== this.state.input } shouldComponentUpdate应该总是返回一个布尔值 —— 就像这个问题的答案 默认情况下它总是返回 但是,如果您担心浪费渲染 我以这种方式写了一篇关于使用shouldComponentUpdate的文章 - 看看:
在这篇文章中,我们谈论一个有很多fields的表格。问题是,当表重新渲染时,每个字段也将重新渲染,速度很慢,效率很低。
最常见的用例: 当您的组件 componentWillUpdate哇,什么过程现在我们承诺更新。"希望我在重新渲染之前先做任何事情?" 我们的组件问。不,我们说。停止打扰我们。在整个MuseFind代码库中,我们从不使用componentWillUpdate。在功能上,它基本上与 如果您正在使用 最常见的用例: 在一个也有shouldComponentUpdate(但不能访问以前的 是否可以调用 componentDidUpdate很棒!小组件! 在这里我们可以和 等等 - 我们没有在 是的我们没有做。原因是:在componentDidUpdate中,你不知道为什么它更新。 因此,如果我们的组件接收到的 这并不意味着 componentDidUpdate() { this.createGrid() } 最常见的用例:更新DOM以响应 componentWillUnmount几乎结束了~ 你的组件将会消失。也许永远,这很伤心。 在它之前,它询问你是否有任何最后的请求。 在这里,您可以取消任何传出的网络请求,或删除与组件关联的所有事件监听器。 基本上,清理任何只涉及到有关的组件的哦事情, componentWillUnmount() { window.removeEventListen('resize',this,resizeListener) } 最常见的用例:清理组件中残留的残留物。 总结在理想的世界中,我们不会使用生命周期方法。我们所有的渲染问题都将通过 但它事实上并不是一个理想的世界,有时您需要更准确地控制组件更新的方式和时间。 谨慎使用这些方法,并小心使用。我希望这篇文章有助于阐明什么时候和如何使用生命周期方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |