reactjs - Cloudinary 在第一次尝试时返回空 url
问题描述
奇怪的是,每当我重新启动 ReactJS 并单击 postDetails 时,它总是返回一个空 URL,如果我再次单击它会返回图像的 URL 路径。我在这里的代码中是否遗漏了一些东西。非常感谢并非常感谢。
const Addpost = () => {
const [photo, setPhoto] = useState("")
const [photoURL, setPhotoURL] = useState("")
const postDetails = () => {
const data = new FormData()
data.append("file", photo)
data.append("upload_preset", "xxxxx")
data.append("cloud_name", "xxxxx")
fetch("https://api.cloudinary.com/v1_1/xxxxx/image/upload",{
method: "POST",
body: data
})
.then(res => res.json())
.then((data) => {
setPhotoURL(data.url)
})
.catch(err => {
console.log(err)
})
}
return (
<React.Fragment>
<input
type="file"
className="form-control-file"
id="photo"
name="photo"
onChange={(e) => setPhoto(e.target.files[0])}
/>
<button
type="submit"
className="btn btn-primary btn-block"
onClick={postDetails}
>
Submit
</button>
</React.Fragment>
)
}
解决方案
尝试这样做async await
(setPhotoUrl()
只会在fetch
获得某些东西后更新或console.log('No data fetched!')
):-
const postDetails = async() => {
const data = new FormData()
data.append("file", photo)
data.append("upload_preset", "xxxxx")
data.append("cloud_name", "xxxxx")
let res = await fetch("https://api.cloudinary.com/v1_1/xxxxx/image/upload",{
method: "POST",
body: data
})
if(!res) console.log('No data fetched!')
let data = res.json()
setPhotoURL(data.url)
}
推荐阅读
- mysql - 从显示的表和日期格式中选择最小元素的最有效查询
- c# - Visual Studio 2019 是否更改了代码指标的标准?我现在得到两倍多
- javascript - 如何在 VisJS 中基于组收集节点?
- image - qb64 无法使用 _putimage 加载图像,我&
- angular - 只有月份和日期的日期选择器(隐藏年份)
- c# - 为什么在一台服务器上运行我的应用程序时出现 Xml 验证错误,但在我的另一台服务器的系统上却没有?
- sql-server - 一周中某一天的 SSMS 滚动平均值
- python - 如何制作 install.py 以使用 Python 安装多个软件包?
- excel - 无法设置 List 属性。无效的属性数组索引
- java - 我想在单击按钮时创建一个复选框