我正在构建一个MERN堆栈应用程序,其中用户必须使用发送到他们的邮箱地址的链接来验证他们的帐户.
用户单击该链接后,它们将被发送到此ActivationPage组件.在这里,我从URL提取令牌,并在useEffect
中的POST请求中将其发送到在数据库中创建用户的服务器(MongoDB).
现在的问题是,当组件第一次运行时,它会返回"Your account has been activated successfully!",但几秒钟后,消息会更改为"您的令牌已过期!"因为useEffect
再次运行并try 再次创建用户,这导致了错误,因此CATCH块运行.所以,我基本上需要一种让useEffect
只运行一次的方法.
import React, { useState, useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';
import axios from 'axios';
import { serverUrl } from '../serverUrl';
const ActivationPage = () => {
const [error, setError] = useState(false);
const [searchParams] = useSearchParams();
const activationToken = searchParams.get('token');
useEffect(() => {
const activationEmail = async () => {
if (activationToken) {
try {
const response = await axios.post(`${serverUrl}/user/activation`, { activationToken });
console.log(response);
} catch (error) {
setError(true);
console.log(`ERROR: ${error.message}`);
}
}
};
activationEmail();
}, []);
return (
<div className='w-full h-screen flex justify-center items-center'>
{error ? <p>Your token has expired!</p> : <p>Your account has been activated successfully!</p>}
</div>
);
};
export default ActivationPage;