栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用异步componentDidMount()好吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用异步componentDidMount()好吗?

让我们首先指出差异并确定差异可能如何引起麻烦。

这是异步和“同步”

componentDidMount()
生命周期方法的代码:

// This is typescript precomponentDidMount(): void {  }async componentDidMount(): Promise<void> {        }

通过查看代码,我可以指出以下差异:

  1. async
    关键字:在打字稿,这仅仅是一个代码标记。它做两件事:
    • 强制将返回类型
      Promise<void>
      改为
      void
      。如果您明确指定返回类型为非承诺(例如:void),则打字稿将向您吐一个错误。
    • 允许您
      await
      在方法内部使用关键字。
  2. 返回类型从更改

    void
    Promise<void>

    • 这意味着您现在可以执行以下操作:
      async someMethod(): Promise<void> { await componentDidMount(); }

  3. 现在,您可以

    await
    在方法内部使用关键字,并暂时暂停其执行。像这样:

    async componentDidMount(): Promise<void> {const users = await axios.get<string>("http://localhost:9001/users");const questions = await axios.get<string>("http://localhost:9001/questions");// Sleep for 10 secondsawait new Promise(resolve => { setTimeout(resolve, 10000); });// This line of pre will be executed after 10+ secondsthis.setState({users, questions});return Promise.resolve();

    }

现在,它们怎么会引起麻烦?

  1. async
    关键字是绝对无害的。
  2. 我无法想象在任何情况下都需要调用该
    componentDidMount()
    方法,因此返回类型
    Promise<void>
    也是无害的。

调用到具有方法的返回类型的

Promise<void>
await
关键字将没有从调用具有返回类型的一个区别
void

  1. 由于没有生命周期方法,因此
    componentDidMount()
    延迟执行似乎很安全。但是有一个陷阱。

假设上述操作

this.setState({users, questions});
将在10秒后执行。在延迟的时间中间,另一个…

this.setState({users: newerUsers, questions: newerQuestions});

…已成功执行,并且DOM已更新。结果对用户可见。时钟继续滴答作响,经过了10秒钟。

this.setState(...)
然后,将执行延迟的操作,然后再次使用旧用户和旧问题更新DOM。结果也将对用户可见。

= >

async
componentDidMount()
method
一起使用非常安全(我不确定大约100%)。我非常喜欢它,到目前为止,我还没有遇到任何让我头疼的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号