以下成員函式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?
uj5u.com熱心網友回復:
您的useEffect鉤子不起作用的原因是它沒有在progress_state_狀態更改時呼叫。
代替
useEffect(() =>
{
...
}, [])
試試這個
useEffect(() =>
{
...
}, [progress_])
添加progress_到依賴陣列意味著useEffect將在每次progress_更改時呼叫。如果您將其保留為空的依賴項陣列,那么useEffect只會在代碼安裝到 DOM 的最開始時呼叫。
這是對依賴陣列的一個很好的解釋:https : //devtrium.com/posts/dependency-arrays
uj5u.com熱心網友回復:
解決你的最后一個問題:是的,這是可能的更新狀態從內useEffect。
要了解您的主要問題的根源,我很想知道您是如何進行日志記錄的。您是從內部登錄fake()還是從您的render()函式中登錄?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389205.html
標籤:javascript 反应 打字稿 哎呀
上一篇:屬性初始化和“this”
