Все, что вам нужно, это обработчик, который запускает метод post
const useFetchData = ({url, headers, payload}) => {
const [res, setRes] = useState({data: null, error: null, isLoading: false});
const [error, setError]
// You POST method here
const callAPI = useCallback() => {
setRes(prevState => ({...prevState, isLoading: true}));
axios.post(url, headers, payload).then(res => {
setRes({data: res.data, isLoading: false, error: null});
}).catch((error) => {
setRes({data: null, isLoading: false, error});
})
}, [url, headers, payload])
return [res, callAPI];
}
Теперь вы можете использовать этот хук в своем коде, а в любом обработчике событий просто вызвать callAPI
, возвращенный из хука, как
const MyFunc = () => {
const [res, apiMethod] = useFetchData({url: 'some url here', headers: {ContentType: 'text/plain'}, payload: {}});
return (
<button onClick={() => {apiMethod()}} type="button">Submit data</button>
)
}
Вы могли бы иметь событие, определенное в состоянии компонента, и передать его в useFetchData
в качестве аргумента.