当前位置: 首页 > 面试题库 >

如何检查componentWillReceiveProps中哪些道具已更改

葛修永
2023-03-14
问题内容

有没有一种方法可以检查里面的道具发生了变化(没有在其他地方存储旧道具)componentWillReceiveProps

componentWillReceiveProps (newProps) {
  if( /* newProps.profileImage is different to previous props */ ) /* do stuff */
}

问题答案:

请注意,该功能componentWillReceiveProps现已 弃用
。引用官方文件:

如果componentWillReceiveProps仅当属性更改时才用于重新计算某些数据,请改用备忘录助手。

这是指您的内部检查componentWillReceiveProps避免不必要地多次重新计算相同内容的情况。在链接的博客文章中,它建议将昂贵功能的结果缓存起来,以便可以查找它,而不是重新计算它。可以使用诸如memoize-
one之
类的助手来完成。

如果您过去componentWillReceiveProps在道具更改时“重置”某些状态,请考虑使用键使组件完全受控或完全不受控制。

同样,链接的博客文章对此进行了更详细的描述,但简而言之:

  • “完全受控”组件是指没有状态的功能组件(父组件负责处理状态)。
  • “完全不受控制”的替代方法 使用props来设置 初始状态 ,然后忽略对道具的所有进一步更改。

在极少数情况下,您可能希望将getDerivedStateFromProps 生命周期作为最后的手段。

该函数接收(props, state)并返回render调用前状态的任何更改,使您可以执行所需的操作。

原始答案,适用于旧版本的React

在此生命周期方法被调用的时间点上,this.props是指先前的一组道具。

要将foo新道具的单个属性与旧道具的相同属性进行比较newProps.foo,只需与比较即可this.props.foo。因此,在您的示例中:

componentWillReceiveProps (newProps) {
  if( newProps.profileImage !== this.props.profileImage ) /* do stuff */
}


 类似资料:
  • 我在laravel 5中工作,我有一个模块,用户可以在其中更新学生的信息,因为用户有一个带有当前数据的预加载表单,并且可以修改他想要的字段。然后,在控制器中,我执行以下操作: 那工作得很好。所以我的问题是:有一种方法可以获得已经更新的字段的名称?

  • 问题内容: 我正在使用将数据放置到API的编辑表单(user.html),但是我想避免将所有数据放置在表单中。我只想输入已更改的项目。 我已经看到在处理表单时使用肮脏和原始的方法,但这适用于表单中的任何更改。我也看到了ng- change的用法,但是我不想触发对一个元素进行更改的动作,只是表示更改后的元素应包含在PUT中。 有人找到一种仅表示已更改的输入字段的方法吗? 问题答案: 如果将输入与属性

  • 问题内容: 我试图找到一种聪明的方法来找出传递给sed的文件是否已成功更改。 基本上,我想知道文件是否已更改,而不必查看文件修改日期。 我之所以需要这样做,是因为如果sed成功替换了模式,我需要做一些额外的事情。 我目前有: 上面的代码有点贵,我希望能够在这里使用一些技巧。 问题答案: 您可以改用: ” 我忽略了该功能:您可以根据需要使用Shell做重定向。 叹。下面有许多评论要求提供有关shel

  • 假设我试图将添加到文件。 我想知道< code >库A的版本是否由插件< code > io . spring . dependency-management 管理。 我没有给出具体的库,因为特定库的答案不是我正在寻找的

  • 谷歌(遗憾地)计划破坏存储权限,使应用程序无法使用标准文件API(和文件路径)访问文件系统。许多人反对它,因为它改变了应用程序访问存储的方式,在很多方面,它是一个受限的API。 因此,如果我们希望处理各种存储卷并访问其中的所有文件,我们将需要在未来的Android版本上完全使用SAF(存储访问框架)(在Android Q上,我们至少可以暂时使用一个标志来使用正常的存储权限)。 例如,假设您想创建一

  • 我正在用Python编写一个脚本,它将使用我在网上找到的API生成一个笑话。(https://sv443.net/jokeapi/v2/)。但是,joke的一些设置/问题部分使用JSON数据,这些数据在“setup”和“joke”之间有所不同。我想看看我是否可以编写一个脚本来检查响应是拉哪一个。我这里有我的脚本: 其中一些答复是 而且 有没有一种方法可以检查响应得到的是哪个数据名?