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

如何在React Hooks中使用shouldComponentUpdate?

钱锦
2023-03-14
问题内容

我一直在阅读以下链接:
https : //reactjs.org/docs/hooks-faq.html#how-do-i-
implement-shouldcomponentupdate

https://reactjs.org/blog/2018/10/23/react
-v-16-6.html

在第一个链接中显示为(https://reactjs.org/docs/hooks-faq.html#from-classes-to-
hooks):

shouldComponentUpdate:请参见React.memo

第二个链接还指出:

当使用PureComponent或shouldComponentUpdate输入类相同时,类组件可以从渲染中解脱出来。现在,您可以通过将功能组件包装在React.memo中来对它们进行相同的操作。

需要什么:

我希望Modal仅在可见Modal时呈现(由this.props.show管理)

对于类组件:

shouldComponentUpdate(nextProps, nextState) {
    return nextProps.show !== this.props.show;
}

我该如何memo在功能组件中使用-在这里,在Modal.jsx中?

相关代码

功能组件Modal.jsx(我不知道如何检查props.show)

import React, { useEffect } from 'react';
import styles from './Modal.module.css';
import BackDrop from '../BackDrop/BackDrop';

const Modal = React.memo(props => {
  useEffect(() => console.log('it did update'));

  return (
    <React.Fragment>
      <BackDrop show={props.show} clicked={props.modalClosed} />
      <div
        className={styles.Modal}
        style={{
          transform: props.show ? 'translateY(0)' : 'translateY(-100vh)',
          opacity: props.show ? '1' : '0'
        }}>
        {props.children}
      </div>
    </React.Fragment>
  );
});

export default Modal;

呈现Modal的类组件PizzaMaker jsx的一部分:

 return (
      <React.Fragment>
        <Modal show={this.state.purchasing} modalClosed={this.purchaseCancel}>
          <OrderSummary
            ingredients={this.state.ingredients}
            purchaseCancelled={this.purchaseCancel}
            purchaseContinued={this.purchaseContinue}
            price={this.state.totalPrice}
          />
        </Modal>
        ...
      </React.Fragment>
    );

问题答案:

这是React.memo的文档

您可以通过一个函数来控制比较:

const Modal = React.memo(
  props => {...},
  (prevProps, nextProps) => prevProps.show === nextProps.show
);

当函数返回时true,将不会重新渲染组件



 类似资料:
  • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

  • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

  • 问题内容: 我想对英语句子加标签,并进行一些处理。我想使用openNLP。我已经安装了 当我执行命令时 它提供输出POSTagging Text.txt中的输入 我希望它安装正确吗? 现在如何从Java应用程序内部进行此POStagging?我已将openNLPtools,jwnl,maxent jar添加到项目中,但是如何调用POStagging? 问题答案: 这是我放在一起的一些(旧)示例代码

  • 问题内容: 我必须在GWT入口点使用java.util.Calendar,但是在运行应用程序时出现错误,这是因为GWT无法找到源代码,无论如何我都可以解决此问题。 提前致谢!!! 问题答案: java.util.Calendar不是模拟的类。您可以在此处找到仿真类的列表: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.ht

  • 问题内容: 我正在尝试使用Java中的HtmlUnit登录网站。首先,我输入用户名,然后输入密码。之后,我需要从下拉框中选择一个选项。输入用户名和密码似乎有效,但是当我尝试从下拉框中选择项目时出现错误。谁能帮我解决这个问题?我的代码如下: 问题答案: 这是HTMLunit的单元测试中的代码。 请注意,他们使用的是getSelectsByName而不是getElementById。 这是这些单元测试

  • 问题内容: 跟进如何在线程池中使用MDC?如何将MDC与?具体来说,我如何在执行任务之前包装一个MDC值? 问题答案: 以下内容似乎对我有用: 和 针对您的任务而不是普通的ForkJoinPool 运行任务。 代替扩展。