#reactjs #post #axios
#reactjs #Публикация #axios
Вопрос:
Здравствуйте, я пытаюсь передать некоторые данные в свой API с помощью axios и react, но я продолжаю получать неопределенные данные. я не могу найти свою ошибку, что я делаю неправильно, был бы признателен за некоторую помощь.
я использую 2 компонента, один для обработки входных данных, которые, кажется, работают, я вижу поля, заполненные данными
import { useState } from 'react'
export const useForm = (initialValues) => {
const [values, setValues] = useState(initialValues);
return [
values,
e => {
setValues({
...values,
[e.target.name]: e.target.values
});
}
]
}
и компонент, в котором вызывается мой API
import "../Admin/admin.css";
import Axios from "axios";
import { useForm } from "./useForm";
// Displays booking with a person added.
const AddBookableTime = () => {
const [values, handleChange] = useForm({ startTime: '', endTime: '' })
const API_ENDPOINT = "https://localhost:44387/api/BookableHours";
const PostBookingTimes = async (e) => {
e.preventDefault()
let times = createBookingTimes(e);
try {
await Axios.post(`${API_ENDPOINT}`, times);
} catch (err) {
}
};
//Creating object to send to api
const createBookingTimes = (e) => {
let bookableHours = {
startTime: e.target.values.startTime,
endTime: e.target.values.endTime,
};
return bookableHours;
};
return (
<>
<form onSubmit={(e) => PostBookingTimes(e)}>
<input type="text" name="startTime" value={values.startTime} onChange={handleChange} ></input>
<input type="text" name="endTime" value={values.endTime} onChange={handleChange} ></input>
<button type="submit" value="Post" className="booking-button">
Lägg till ny bokningsbar tid
</button>
</form>
</>
);
}
export default AddBookableTime;
Комментарии:
1.
`${API_ENDPOINT}`
может быть заменен наAPI_ENDPOINT
!2. ваш
createBookingTimes
метод не является необходимым. при отправке вы хотите передать значения, сохраненные в вашем состоянии. ваш пост должен бытьawait Axios.post(API_ENDPOINT, values);
3. ну, вы не указали, где вы получаете неопределенный. кстати, я считаю
e.target.values
, что в вашей форме использования должно быть единственное число[e.target.name]: e.target.value
4. должно быть e.target.value, а не e.target.values.. попробуйте const {name, value} = e.target; setValues({ …values, [name]: value });
5. не используйте e.target.value внутри асинхронной функции, вместо этого сохраните значение внутри переменной, а затем [name]: value .