Hmm... czyli próbujesz wywołać kod asynchroniczny przed renderowaniem komponentu, ale niestety nie można zrobić tego w ten sposób. Trzeba wykorzystać tutaj useEffect
i useState
.
Nigdy nie korzystałem z tej biblioteki Swal.fire(...)
, więc trochę zgaduję, ale powinno zadziałać
import React, { useState, useEffect } from "react";
export default function DokumentUsunOknoWyboru(props) {
// Tworzymy stan komponentu
const [isDismissed, setIsDismissed] = useState(false);
// Wywołujemy asynchroniczny kod po zamontowaniu komponentu w DOM
useEffect(() => {
Swal.fire({
title: 'Czy na pewno usunąć zlecenie?',
text: "Polecenie to jest nieodwracalne, proszę o przemyślany wybór.",
icon: 'warning',
showCancelButton: true,
cancelButtonText: 'Anuluj',
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Tak, usuń',
}).then(result => {
let id = 305
if (result.isConfirmed) {
fetch('http://192.168.1.4:3333/test', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ id }),
})
.then(response => {
return response.text();
})
.then(data => {
if (data === 'wykonano') {
Swal.fire(
'Zrobione!',
'Zlecenie zostało usunięte!',
'success'
)
}
})
.catch((error) => {
console.log(error);
});
}
if (result.isDismissed) {
// Ustawiamy potrzebną wartość do wyświetlenia komponentu
setIsDismissed(true);
}
})
}, []);
// Wyświetlamy komponent na podstawie nowego warunku
return isDismissed
? <KomponentUsunZlecenie wyswietl={true} />
: null;
}
Nie jestem pewien, czy prawidłowo skopiowałem Twój przykład, bo całość piszę z telefonu, ale kod powinien się zmienić jedynie w tych miejscach, gdzie zostawiłem komentarz.