[英]Changing a state and render a component on a function call with react
我正在创建一个模块,用户必须在其中上传图像,在等待时我想使用加载 state 设置覆盖,我有以下代码:
const ModulePage = () => {
const sendData = () => {
//...Send data to firebase
}
return {
<div className="Overlay" /> //I want to display this conditionally while sending
//...
<button onClick={sendData}>Send Module</button>
}
}
我尝试使用 useState
const ModulePage = () => {
const [isUploading, setIsUploading] = useState(false);
const sendData = () => {
setIsUploading(true)
//...Send data to firebase
setIsUploading(false)
}
return {
{isUploading && <div className="overlay" />}
//...
<button onClick={sendData}>Send Module</button>
}
}
但是没有 useEffect 不起作用,并且使用 useEffect 它在无限循环上运行,如果我这样做:
const ModulePage = () => {
const [isUploading, setIsUploading] = useState(false);
const uploadHandler = () => {
setIsuploading(true);
}
useEffect(() => {
//...Send data to firebase
setIsUploading(false)
}, [isUploading]);
return {
{isUploading && <div className="overlay" />}
//...
<button onClick={uploadHandler}>Send Module</button>
}
}
它从不运行 sendData function
如果发送数据代码是 promise 你试试这个
const sendData = async () => {
setIsUploading(true)
await //... Send data to firebase
setIsUploading(false)
}
或这个
const sendData = () => {
setIsUploading(true)
sendDataFunction().then((result) => {
setIsUploading(false)
}).catch((err) => {
setIsUploading(false)
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.