首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从回调中进行状态更新

从回调中进行状态更新
EN

Stack Overflow用户
提问于 2021-12-17 14:02:46
回答 2查看 72关注 0票数 1

以下成员函数异步地使用假数据填充folder_structure对象:

代码语言:javascript
运行
复制
    fake(folders_: number, progress_callback_: (progress_: number) => void = (progress_: number) => null): Promise<boolean>
    {
        return new Promise((resolve, reject) => {
            for (let i_ = 0; i_ < folders_; i_++) {
                progress_callback_(i_ / folders_ * 100.);

                this.add(this.id(), faker.address.city() + i_, random_choice(this.folder_structure_id()));
            }

            progress_callback_(folders_ / folders_ * 100.);

            resolve(true);
        })
    }

它使用回调更新for循环中的进度,然后用空依赖数组从useEffect()函数中更新状态(进度条)。

代码语言:javascript
运行
复制
   let [progress_state_, set_progress_state_] = useState<number>(0);

   let [fake_done_, set_fake_done_] = useState<boolean>(false);

    useEffect(() =>
    {
        if (fake_)
            folder_structure_.fake(fake_, (progress_) => {
                set_progress_state_(progress_)
            }).then(value => set_fake_done_(value));
    }, [])

    if (!fake_ || fake_done_) etc etc

但是,状态没有更新(在控制台中记录进度似乎很好)。是否可以从useEffect内部更新状态

EN

回答 2

Stack Overflow用户

发布于 2021-12-17 22:47:40

useEffect钩子不能工作的原因是它没有调用progress_state_状态更改。

而不是

代码语言:javascript
运行
复制
useEffect(() =>
    {
        ...
    }, [])

尝试这个而不是

代码语言:javascript
运行
复制
useEffect(() =>
    {
        ...
    }, [progress_])

progress_添加到依赖数组意味着每次progress_更改时都会调用useEffect。如果将它保留为一个空依赖数组,那么只有在代码被挂载到DOM时,useEffect才会被调用。

下面是对依赖数组的一个很好的解释:https://devtrium.com/posts/dependency-arrays

票数 0
EN

Stack Overflow用户

发布于 2021-12-17 14:18:10

最后一个问题是:是的,可以从useEffect内部更新状态。

为了了解您的主要问题的根源,我很想知道您是如何进行日志记录的。您是从fake()内部登录还是从render()函数登录?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70394362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档