gpt4 book ai didi

reactjs - 如果在回调函数中调用 useState,则不会重新渲染组件

转载 作者:行者123 更新时间:2023-12-04 07:56:37 25 4
gpt4 key购买 nike

我有一个上传视频的组件,我正在尝试显示进度条。这是我的核心代码。

const Upload = () => {
const [percent, setPercent] = useState(0);
console.log(percent); // This logs uploaded percentage every time progListener callback is called. From 0 to 100.
const dropAccepted = async () => {
const params = {...} // parameters to upload video like filename, file
await APIs.uploadVideo(params, progListener);
}
const progListener = (event) => {
var p = Math.round((event.loaded * 100) / event.total)
// console.log(p) logs uploaded percentage from 0 to 100
setPercent(p);
}

return (
<h6>{percent}</h6>
<Dropzone onDropAccepted={dropAccepted}/>
)
}

在 progListener 回调中,我用 setPercent 函数更新了百分比,所以我认为 h6 应该打印上传的百分比。但它始终为 0。我的代码有什么问题?如果有任何帮助,我将不胜感激。

最佳答案

用 useRef 更新它,

之所以useState不显示最新值是因为useState是异步的。所以在你的情况下 useState 正在更新而不给它重新渲染的机会。在这些情况下,useRef 发挥更好的作用。

import React, {useRef} from "react";

const Upload = () => {
const percent = useRef(0);

const progListener = (event) => {
percent.current = Math.round((event.loaded * 100) / event.total)
}

return (
<h6>{percent.current}</h6>
<Dropzone onDropAccepted={dropAccepted}/>
)
}

关于reactjs - 如果在回调函数中调用 useState,则不会重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66670473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com