为什么即使在更改状态后我的状态值也没有改变?
Why my state value is not changing in react even after changing its state?
我正在尝试通过我的 React 组件在 cloudinary 上上传一个文件,然后在成功上传文件时获取它的 url。
这是我的组件:
export default function Write() {
const [file, setFile] = useState(null)
const [photo, setPhoto] = useState('')
const postDetails = () => {
const data = new FormData()
data.append('file', file)
data.append('upload_preset', 'mypresetname')
data.append('cloud_name', 'mycloudname')
console.log(photo)
fetch('https://api.cloudinary.com/v1_1/mycloudname/image/upload', {
method: 'POST',
body: data,
})
.then((res) => res.json())
.then((data) => setPhoto(data.url))
.catch((err) => {
console.log(err)
})
}
const handleSubmit = async (e) => {
e.preventDefault()
postDetails()
}
return (<form onSubmit={handleSubmit}>
<input
type='file'
name='file'
onChange={(e) => setFile(e.target.files[0])}
/>
<button type='submit'> Publish </button></form>)}
当我尝试做 .then((data) => console.log(data.url)) 而不是 .then((data) => setPhoto(data.url)) 我得到了 url 正确但是当我做 .then(( data) => (setPhoto(data.url), console.log(photo))) 我得到的照片是空字符串。为什么我已经设置了照片的值?
请帮忙
谢谢
setPhoto
不会立即 运行,它必须重新运行 函数才能使效果可见。尝试将 console.log(photo)
放在 return 语句之前。
我正在尝试通过我的 React 组件在 cloudinary 上上传一个文件,然后在成功上传文件时获取它的 url。
这是我的组件:
export default function Write() {
const [file, setFile] = useState(null)
const [photo, setPhoto] = useState('')
const postDetails = () => {
const data = new FormData()
data.append('file', file)
data.append('upload_preset', 'mypresetname')
data.append('cloud_name', 'mycloudname')
console.log(photo)
fetch('https://api.cloudinary.com/v1_1/mycloudname/image/upload', {
method: 'POST',
body: data,
})
.then((res) => res.json())
.then((data) => setPhoto(data.url))
.catch((err) => {
console.log(err)
})
}
const handleSubmit = async (e) => {
e.preventDefault()
postDetails()
}
return (<form onSubmit={handleSubmit}>
<input
type='file'
name='file'
onChange={(e) => setFile(e.target.files[0])}
/>
<button type='submit'> Publish </button></form>)}
当我尝试做 .then((data) => console.log(data.url)) 而不是 .then((data) => setPhoto(data.url)) 我得到了 url 正确但是当我做 .then(( data) => (setPhoto(data.url), console.log(photo))) 我得到的照片是空字符串。为什么我已经设置了照片的值?
请帮忙 谢谢
setPhoto
不会立即 运行,它必须重新运行 函数才能使效果可见。尝试将 console.log(photo)
放在 return 语句之前。