如何让 useEffect() 像 componentDidMount() 一样工作?
How to have useEffect() act like componentDidMount()?
我正在使用功能组件,我需要能够使用 componentDidMount()。在网上我发现通过react hooks你可以在功能组件中使用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';
useEffect 的工作方式有点不同。
它接收一个函数,可以 return 清理函数。
因此您的代码可以是:
const Contact = ({
previousProgressBarNow,
setPreviousStepValue,
addPropsToCallback,
hasSuggestions,
showSMSOptInCheckbox,
params,
sendEnhancedTrackEvent
}) => {
// code
// This acts as componentDidMount
useEffect(() => {
sendEnhancedTrackEvent(enhanceableData);
}, []);
const ProvidersContainer = ({getProvidersData}) => {
const [pageNo, setpageNo] = useState(1);
useEffect(() => { // Component Did Mount
getProvidersData(pageNo);
}, []);
}
我正在使用功能组件,我需要能够使用 componentDidMount()。在网上我发现通过react hooks你可以在功能组件中使用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';
useEffect 的工作方式有点不同。 它接收一个函数,可以 return 清理函数。
因此您的代码可以是:
const Contact = ({
previousProgressBarNow,
setPreviousStepValue,
addPropsToCallback,
hasSuggestions,
showSMSOptInCheckbox,
params,
sendEnhancedTrackEvent
}) => {
// code
// This acts as componentDidMount
useEffect(() => {
sendEnhancedTrackEvent(enhanceableData);
}, []);
const ProvidersContainer = ({getProvidersData}) => {
const [pageNo, setpageNo] = useState(1);
useEffect(() => { // Component Did Mount
getProvidersData(pageNo);
}, []);
}