当前位置: 首页 > 知识库问答 >
问题:

如何让useEffect()像componentDidMount()一样工作?

公英哲
2023-03-14

我正在使用一个功能组件,我需要能够使用componentDidMount()。我在网上发现,通过react钩子,可以将useEffect()用作功能组件中的componentDidMount()。然而,这并不像我想象的那样有效。我原以为在页面加载时会触发,但事实并非如此。有人知道如何让useEffect表现得像componentDidMount吗?

const Contact = ({
  previousProgressBarNow,
  setPreviousStepValue,
  addPropsToCallback,
  hasSuggestions,
  showSMSOptInCheckbox,
  params,
  sendEnhancedTrackEvent
}) => {
  const enhanceableData = {
    name: 'Item Clicked',
    properties: {
      ...defaultProps,
      activityLocation: 'Member - RAQ Contact Details - useEffect',
      description: 'SMS Opt-In Checkbox',
      autopopulated: true,
      changeType: 'Add',
      href: process.env.IS_BROWSER && typeof window !== 'undefined' ?
          window.location.href : undefined
    }
  };

  // This acts as componentDidMount
  useEffect(() => {
    return () => {
      sendEnhancedTrackEvent(enhanceableData);
    }
  }, []);

我试着只是简单地这样做,但它创建了一个无限循环,我得到了一个错误:

  useEffect(() => {
    sendEnhancedTrackEvent(enhanceableData);
  });

是的,我已经导入了它:

import React, { useState, useEffect } from 'react';

共有2个答案

阎鹏
2023-03-14
const ProvidersContainer = ({getProvidersData}) => {
 const [pageNo, setpageNo] = useState(1);
 useEffect(() => { // Component Did Mount
  getProvidersData(pageNo);
 }, []);
}
缪志新
2023-03-14

useEffect的工作原理有点不同。它接收一个函数,该函数可以返回清理函数。

因此,您的代码可以是:

const Contact = ({
  previousProgressBarNow,
  setPreviousStepValue,
  addPropsToCallback,
  hasSuggestions,
  showSMSOptInCheckbox,
  params,
  sendEnhancedTrackEvent
}) => {
  // code

  // This acts as componentDidMount
  useEffect(() => {
    sendEnhancedTrackEvent(enhanceableData);
  }, []);
 类似资料:
  • 我有一个像这个图像的登录表单。 登录按钮是一个带有图标的JLabel。我想要能够按下“进入”和登录。 我已经将登录逻辑放入名为doAction()的方法中;我在login Label上有一个MouseEvent,它按预期工作,并在任何时候单击login JLabel时调用doAction()。我希望同样的事情发生在任何时候,我按下“回车”。我试过这个: 问题是,只有当我使用PasswordFiel

  • 我一直在尝试访问Angular应用程序中的sqwiggle API,并使用Postman进行测试。一切似乎都很顺利。我定义了一个BasicAuth头,对消息endpoint执行GET请求,得到了一个很好的响应。这些是请求头(来自邮递员): 现在在我的AngularJS应用程序中,我想做同样的事情: 但这会导致以下请求标头: 鉴于Postman使用JS从API获取数据,在AngularJS中也应该是

  • 有没有办法让javafx中的TableView像swing中的JTable一样工作? TableView中编辑单元格内容的当前过程是: 选择单元格。 在单元格上按回车键进入编辑模式。 打字。 按回车键提交编辑。 而在jtable中要容易得多;您不必按enter键进行编辑;你可以直接编辑。 在这一点上,有没有让javafx表视图像jtable一样工作的想法?

  • 我一直在使用毕加索的库将图像加载到我的应用程序中的gridview中,它的工作和外观完全符合我的要求。但是用户告诉我图像的加载速度非常慢。我知道这是因为糟糕的网络速度和毕加索正在加载我的完整图像,这是非常大的,然后调整它们的大小,以适应我的图像视图。所以我尝试使用glide,它以几乎两倍的速度装载图像,但在一些图像上,它不像毕加索那样保持结构。例如,毕加索加载图像看起来像 当滑翔加载时,它们有不同

  • 有人能解释一下我做错了什么吗?我有一个react功能组件,在其中我使用useEffect钩子从服务器获取一些数据,并将这些数据放入状态值。在获取数据之后,在同一个useHook中,我需要使用该状态值,但由于某些原因,该值是明确的。看看我的示例,console有一个空字符串,但在浏览器上我可以看到该值。 链接到codesandbox。

  • 我的JS应用程序正在使用wiremock来模拟后端调用。是否可以创建这样的Wiremock定义来创建回显服务(响应的正文JSON内容应该与请求的正文JSON内容相同)。