我请求在Salesforce Marketing Cloud上对我的网页进行身份验证,身份验证必须只进行一次并存储.

我的问题是,当我请求身份验证和获取代码时,我收到两个请求,第一个请求成功,第二个请求错误.

问为什么我在REACTIVE JS上收到两个请求1useEffect?我的组件是否加载了两次?

以下是我的代码:

useEffect(() => {
    async function initialize() {
      const params = await getParamsFromUrl();
      if (params.code) {
        await getTokenAndSaveToSession(params.code);
        await fetchJourneyData(); // Renamed the function to make it clearer
      } else {
        console.log('There is no code in the params');
      }
    }

    initialize();
  }, []); // The empty dependency array ensures that the effect runs only once on mount

  async function getTokenAndSaveToSession(code: string) {
    try {
      const authService = new AuthService();
      const result = await authService.getToken(code);
      sessionStorage.setItem('token', result.token);
      sessionStorage.setItem('expiration', result.expiration.toString());
    } catch (error) {
      console.log(error);
    }
  }

推荐答案

根据React docs的说法,在开发中,Reaction会两次挂载您的组件,以确保您的组件呈现是纯的.

Reaction有意重新挂载开发中的组件,以查找上一个示例中的错误.正确的问题不是"如何运行一次效果",而是"如何修复我的效果,使其在重新挂载后起作用".

通常,答案是实现清理功能.清理功能应该停止或undo撤消效果正在做的任何事情.经验法则是,用户不应该能够区分运行一次的效果(如在生产中)和设置→Cleanup→设置序列(如您将在开发中看到的).

对于您的情况,如果您向其发出请求的服务器只允许请求一次,则您可能希望处理组件发出第二个请求时的情况,以便它重用在第一个请求中已经获得的验证码.

Javascript相关问答推荐

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

从PWA中的内部存储读取文件

字节数组通过echo框架传输到JS blob

单击子元素时关闭父元素(JS)

如何在mongoose中链接两个模型?

为什么当我解析一个promise时,输出处于挂起状态?

使用Java脚本根据按下的按钮更改S文本

Angular 中的类型错误上不存在获取属性

未定义引用错误:未定义&Quot;而不是&Quot;ReferenceError:在初始化&Quot;之前无法访问';a';

如何使用JavaScript拆分带空格的单词

为什么我的getAsFile()方法返回空?

自定义确认组件未在vue.js的v菜单内打开

如何在Java脚本中对列表中的特定元素进行排序?

是否可以将Select()和Sample()与Mongoose结合使用?

图表4-堆叠线和条形图之间的填充区域

处理TypeScrip Vue组件未初始化的react 对象

在没有任何悬停或其他触发的情况下连续交换图像

Rails 7:在不使用导入映射的情况下导入Java脚本

在JS/TS中构造RSA公钥