以下成员函数异步地使用假数据填充folder_structure对象:
    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()函数中更新状态(进度条)。
   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内部更新状态
发布于 2021-12-17 22:47:40
useEffect钩子不能工作的原因是它没有调用progress_state_状态更改。
而不是
useEffect(() =>
    {
        ...
    }, [])尝试这个而不是
useEffect(() =>
    {
        ...
    }, [progress_])将progress_添加到依赖数组意味着每次progress_更改时都会调用useEffect。如果将它保留为一个空依赖数组,那么只有在代码被挂载到DOM时,useEffect才会被调用。
下面是对依赖数组的一个很好的解释:https://devtrium.com/posts/dependency-arrays
发布于 2021-12-17 14:18:10
最后一个问题是:是的,可以从useEffect内部更新状态。
为了了解您的主要问题的根源,我很想知道您是如何进行日志记录的。您是从fake()内部登录还是从render()函数登录?
https://stackoverflow.com/questions/70394362
复制相似问题