【发布时间】:2021-02-17 05:54:57
【问题描述】:
大家好,我正在学习 react js,我有一个更新表格来更新书籍信息。我正在使用 django rest api 作为端点。我有一个工作表单,我可以上传文件并做所有这些事情,但我无法显示模板中已经存在的图像,这里我有一个书籍封面图像,它已经存在于数据库中,它应该显示在前端,当我更改图像时,应该显示新图像,我如何在此处添加该功能,我尝试了<img src={formData.book_cover} 并安慰这是显示 url,但图像没有显示.
在网络选项卡中, 我认为的问题是
Request URL:http://localhost:3000/media/book/book_sample/pride_in_nat.png
请求 url,因为如果 url 是 localhost:8000 而不是 localhost:3000 则显示图像,因为它是 django 服务器后端运行的地方。那么,我该如何改变呢?
这是代码。
import React from "react";
function BookInfoForm() {
const initialFormData = Object.freeze({
id: '',
book_cover: '',
book_name: '',
book_summary: '',
});
const [formData, updateFormData] = useState(initialFormData);
const [image, setImage] = useState(null);
const { register, handleSubmit, control, errors } = useForm();
useEffect(() => {
axiosInstance.get('api/books/info/update/').then((res) => {
updateFormData({
...formData,
['book_cover']: res.data.book_cover,
['book_name']: res.data.book_name,
['book_summary']: res.data.book_summary,
});
});
}, [updateFormData]);
const handleChange = (e) => {
if (e.target.name === 'image') {
setImage({
image: e.target.files,
});
// console.log(e.target.files);
}
updateFormData({
...formData,
// Trimming any whitespace
[e.target.name]: e.target.value
});
};
const onSubmit = (data) =>{
let formData = new FormData();
formData.append('user', user.id),
formData.append('book_cover', data.image[0]),
formData.append('book_name', data.book_name),
formData.append('book_summary', data.book_summary),
axiosInstance.put('api/books/info/update/', formData),
}
return (
<>
<form className={classes.form} noValidate onSubmit={handleSubmit(onSubmit)}>
<Grid container spacing={2}>
<Grid item xs={6}>
{/* Show existing book cover and change when new one is uploaded */}
<img src={formData.store_logo} alt="" />
<label htmlFor="book-cover">
<input
accept="image/*"
className={classes.input}
id="book-cover"
onChange={handleChange}
name="image"
type="file"
ref={register}
/>
Book Cover
<IconButton color="primary" component="span">
<PhotoCamera />
</IconButton>
</label>
</Grid>
<Grid item xs={12}>
<TextField
variant="outlined"
required
fullWidth
id="book_name"
label="Book Name"
name="book_name"
autoComplete="book_name"
value={formData.book_name}
onChange={handleChange}
inputRef={register({maxLength: 30})}
rows={1}
/>
</Grid>
<Grid item xs={12}>
<TextField
variant="outlined"
required
fullWidth
id="book_summary"
label="Book Summary"
name="book_summary"
autoComplete="book_summary"
value={formData.book_summary}
onChange={handleChange}
inputRef={register({maxLength: 1000})}
multiline
rows={3}
/>
</Grid>
</Grid>
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
>
Update
</Button>
</form>
</>
)
}
【问题讨论】:
-
关于您的图片请求的网络标签显示了什么?
-
嘿,感谢您的回复,我检查了网络选项卡并显示了文件,但是当我单击时,它显示一个空白页面。我认为的问题是
Request URL: http://localhost:3000/media/book/book_sample/pride_in_nat.png,如图所示,如果 url 是 localhost:8000,因为它是 django 服务器后端运行的地方。那么,如何改变呢? -
您将 URL 的哪一部分存储在数据库中?是
http://localhost:3000/media/book/book_sample/pride_in_nat.png还是pride_in_nat.png还是别的什么? -
对不起,我没听懂这个问题。我没有对其正常的保存行为进行任何更改,
-
在数据库中链接是
book/book_sample/pride_in_nat.png
标签: javascript reactjs react-native react-router jsx