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

JSX道具不应该使用.bind()-如何避免使用bind?

汪明德
2023-03-14
问题内容

我有一个容器,需要更改显示表单或显示成功页面的UI表单。

容器具有state.showSuccess,我需要MyFormModule才能调用容器以更改状态。

下面的代码有效,但出现以下警告:

“ JSX道具不应该使用.bind()”

不使用.bind()怎么办?

    ...
    const myPage = class extends React.Component {
      state = { showSuccess: false };
      showSuccess() {
       this.setState({
          showSuccess: true,
        });
      }
      render() {
        const { showSuccess } = this.state;
        if (showSuccess) {...}
        ....
        <MyFormModule showSuccess={this.showSuccess.bind(this)} />

问题答案:

您应该首先了解 为什么 这是一个不好的做法。

这里的主要原因.bind是返回一个新的函数引用。
每次render通话都会发生这种情况,这可能会导致性能下降。

您有2个选择:

  1. 将构造函数用于bind您的处理程序(这只会运行 一次 )。
        constructor(props) {
      super(props);
      this.showSuccess = this.showSuccess.bind(this);
    }
  1. 或使用箭头函数创建处理程序,以便它们将使用的词法上下文this,因此您完全不需要bind它们(您需要babel插件):
        showSuccess = () => {
      this.setState({
        showSuccess: true,
      });
    }

你应该 使用这种模式(如其他建议):

showSuccess={() => this.showSuccess()}

因为这也会在每个渲染器上创建一个新函数。
因此,您可以绕过该警告,但仍在以不良做法设计编写代码

从ESLint文档:

JSX
prop中的绑定调用或箭头函数将在每个渲染器上创建一个全新的函数。这对性能不利,因为这将导致以不必要的方式调用垃圾回收器。如果将全新功能作为道具传递给使用该道具上的引用相等性检查来确定是否应更新的组件,则这也可能导致不必要的重新渲染。



 类似资料:
  • 问题内容: 我读到应该避免赞成和。我对弄乱Loop并没有信心,也没有完全理解Codex。 下面的代码是否使用?如果是,并且由于应该避免,那么您能建议一种不使用但仍然完成相同任务的方法吗? 此代码用于按随机或按价格对帖子进行排序。 。 使用此代码将链接A(随机)和链接B(价格)发布在我的菜单中。因此,网站的访问者只需单击链接即可对帖子进行排序。 问题答案: 我已经针对WPSE这个主题做了非常详细的解

  • 问题内容: 我正在用我的React应用程序运行lint,并且收到此错误: 这是我运行箭头功能(在里面)的地方: 是否应避免这种不良做法?最好的方法是什么? 问题答案: 为什么您不应该在JSX props中使用内联箭头功能 在JSX中使用箭头函数或绑定是不利于性能的不良做法,因为该函数会在每个渲染器上重新创建。 每当创建一个函数时,就会对前一个函数进行垃圾回收。渲染许多元素可能会在动画中产生垃圾。

  • 问题内容: 今天,我有一个同事建议我重构代码,以使用label语句控制通过我创建的2个嵌套的for循环的流。我以前从未使用过它们,因为我个人认为它们会降低程序的可读性。如果论点足够扎实,我愿意改变使用它们的想法。人们对标签陈述有何看法? 问题答案: 如果您可以跳过两个循环(或一个包含switch语句的循环),则许多算法的表达会更容易。不要为此感到难过。另一方面,它可能表明解决方案过于复杂。因此,退

  • 问题内容: 有时是有用的,例如,如果我为网站上的所有链接(例如选择器)定义了通用样式,但是当我要覆盖某些规则时,可以有以下选择: 使用更具体(更长)的选择器 采用 哪种方法更好,可能有一些指导原则? 问题答案: 使用非常,非常谨慎- 它会覆盖刚才的一切,甚至是内联样式和混乱在低于显而易见的方式与样式规则“梯级”,让CSS的名字。它很容易使用不当,而且容易成倍增加,尤其是在滥用时。您可以轻松地得出一

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 问题内容: 这看起来很丑。可选选项的优点在这里完全消失了。我读到应该使用或代替。但是,如果我更换每个吸气剂,真的有好处吗? 与 您知道这里的一些常见或最佳做法吗? 问题答案: 您可以使用 关键是仅在可选函数不为空时才评估映射函数,否则结果将保留为空。如果可选为空,将返回。