Я пытаюсь установить DataList перед выполнением вызова API.
но dataList ничего не содержит при выполнении вызова API.
мои коды работают со следующими шагами.
но мой вызов API не работает из-за отсутствия списка данных.
Я знаю, что хуки работают асинхронно.
но как мне отправить вызов API с правильным списком данных.
const [ dataList, setDataList ] = useState<any>([]); //set Hooks
//a filtering function
async function getSortedId() {
await selected.map(data => {
console.info("transaction_id", data.transaction_id);
//set sorted Data to datalist
setDataList((dataList : any) => [...dataList, data.transaction_id]);
})
}
const onSubmit = (data : any) => {
let refundMsg = "";
getSortedId();
axios.put("/api/v1/updates", {
params: {
"refundIdList" : dataList, //dataList should have some value but it contains nothing.
"refundReason" : refundMsg,
"reasonEtcReason" : data.reasonEtcReason,
"feeUserPay" : data.feeUserPay ? 1 : 0,
"penaltyFeeUserPay" : data.penaltyFeePartnerPay ? 1 : 0,
"penaltyFeeUtPay:" : data.penaltyFeeUtPay ? 1 : 0,
"penaltyFeePartnerPay" : data.penaltyFeePartnerPay ? 1 : 0,
}
}).then(res => {
console.info("response", res);
}).catch(err => {
console.info("Error : ", err);
})
}
};
return (
<Button type = "submit" onClick = {onSubmit()} > Save </Button>
)
getSortedId не обязательно должен быть async, поскольку в вашей функции не происходит ничего асинхронного, и вы все равно игнорируете возвращенное обещание внутри onSubmit. Также вы перезаписываете значение dataList каждой записью selected.





Вам нужен перехватчик useEffect для вызова API при изменении dataList
const [dataList, setDataList] = useState<any>([]); //set Hooks
//a filtering function
function getSortedId() {
selected.map(data => {
console.info("transaction_id", data.transaction_id);
//set sorted Data to datalist
setDataList((dataList: any) => [...dataList, data.transaction_id]);
})
}
useEffect(() => {
callApi()
}, [dataList])
const callApi = async () => {
if (dataList && dataList.length > 0) {
axios.put("/api/v1/updates", {
params: {
"refundIdList": dataList, //dataList should have some value but it contains nothing.
"refundReason": refundMsg,
"reasonEtcReason": data.reasonEtcReason,
"feeUserPay": data.feeUserPay ? 1 : 0,
"penaltyFeeUserPay": data.penaltyFeePartnerPay ? 1 : 0,
"penaltyFeeUtPay:": data.penaltyFeeUtPay ? 1 : 0,
"penaltyFeePartnerPay": data.penaltyFeePartnerPay ? 1 : 0,
}
}).then(res => {
console.info("response", res);
}).catch(err => {
console.info("Error : ", err);
})
}
}
const onSubmit = (data: any) => {
let refundMsg = "";
getSortedId();
}
return (
<Button type = "submit" onClick = {onSubmit()} > Save </Button>
)
Не вызывайте
getSortedIdвнутриonSubmit- лучше используйте ловушкуuseEffectс зависимостью отselected(из функцииgetSortedId), которая обновляетdataList.