Я делаю форму, которая содержит пару текстовых входов и один вход для загрузки файла. Я не уверен, как установить состояние, отражающее массив фотографий, которые были загружены. А затем, как использовать значение указанного состояния, чтобы сделать запрос POST. Теоретически, я хочу иметь возможность загрузить несколько фотографий, зафиксировать их значения и установить их в качестве состояния файлов, а затем отправить массив информации в конечную точку.
function NewItem(props) {
const history = useHistory();
const { classes } = props;
const { isDarkMode } = useContext(ThemeContext);
const { token } = useContext(LoggedInContext);
const [itemNameValue, handleItemNameChange, resetItemName] = InputState("");
const [itemPriceValue, handlePriceChange, resetPriceUrl] = InputState("");
const [
itemDescriptionValue,
handleItemDescriptionChange,
resetItemDescription
] = InputState("");
const [fileState, setFileState] = useState([]);
const handleFileUpload = e => {
setFileState(e.target.files[0]);
};
const handleNewItemSubmit = e => {
e.preventDefault();
fetch("http://localhost:8181/items", {
body: JSON.stringify({
title: itemNameValue,
price: itemPriceValue,
description: itemDescriptionValue,
photos: fileState
}),
headers: {
"Content-Type": "application/json",
Token: token
},
method: "POST"
})
.then(res => res.json())
.then(data => {
console.log(data);
handleSnackbarClick();
});
};
return (
<PageContent>
<Navbar />
<h1 className={classes.heading} style={{ color: isDarkMode && "white" }}>
New Item
</h1>
<form
className={classes.newForm}
noValidate
autoComplete="off"
onSubmit={handleNewItemSubmit}
>
<TextField
id="outlined-desc"
label="Facebook Item Description"
variant="outlined"
multiline={true}
rows={4}
rowsMax={8}
onChange={handleItemDescriptionChange}
value={itemDescriptionValue}
InputLabelProps={{
classes: {
root: isDarkMode && classes.cssLabel,
focused: classes.cssFocused
}
}}
InputProps={{
classes: {
root: isDarkMode && classes.cssOutlinedInput,
focused: classes.cssFocused,
notchedOutline: isDarkMode && classes.notchedOutline,
input: isDarkMode && classes.multilineColor
}
}}
/>
<div className={classes.photo_groups}>
<input
accept="image/*"
className={classes.input}
style={{ display: "none" }}
id="raised-button-file"
multiple
type="file"
onChange={handleFileUpload}
/>
<label htmlFor="raised-button-file">
<Button
variant="raised"
component="span"
className={classes.button}
>
Photo Upload
</Button>
</label>
<GroupCheckbox />
</div>
</form>
</PageContent>
);
}