endmd adlı üyeden alıntı:
mesajı görüntüle
react useParams cache mi tutuyor
14
●198
- 12-01-2023, 16:53:04Teşekkür ederim, tamamdır.Developer adlı üyeden alıntı: mesajı görüntüle
- 13-01-2023, 20:18:57Merhaba,endmd adlı üyeden alıntı: mesajı görüntüle
Kodunda Async-Await işlemlerinin hatalı olduğunu belirtmiştim. Bir fonksiyondan dışarıya cevap vermen gerekli async işlemini sağlayabilmek için. Yani bir return veya bir resolve dönmen gerekiyor. Örneğin:
const abc = () => { return new Promise(resolve => { resolve(true) }); } console.log(await abc()); // true // veya abc() .then(data => { console.log(data) // true })Sen eğer useEffect içerisinde getDetails()'den sonra bir fonksiyon çalıştırmak istersen, önce çalışabilir. Çünkü async işlemi başarılı değil. Burada şöyle bir düzeltme yapman gerekli:
const getDetails = async () => { setIsLoading(true); // setDetails([]); const options = { method: "GET", headers: { "X-RapidAPI-Key": process.env.REACT_APP_MEAL_RECIPE_API_KEY, "X-RapidAPI-Host": "food-recipe-api.p.rapidapi.com", }, }; return fetch( `https://${process.env.REACT_APP_MEAL_RECIPE_API_HOST}/recipe/${params.id}`, options, { signal: controller.signal } ) .then((response) => response.json()) .then((response) => { setDetails(response[0]); return response; }) .then(response => { controller.abort(); setIsLoading(false); return response; }); };Bu şekilde useEffect içerisinde getDetails'i await hale getirebilirsin veya then-catch yapabilirsin. Veya:
const getDetails = async () => { return new Promise((resolve, reject) => { setIsLoading(true); // setDetails([]); const options = { method: "GET", headers: { "X-RapidAPI-Key": process.env.REACT_APP_MEAL_RECIPE_API_KEY, "X-RapidAPI-Host": "food-recipe-api.p.rapidapi.com", }, }; return fetch( `https://${process.env.REACT_APP_MEAL_RECIPE_API_HOST}/recipe/${params.id}`, options, { signal: controller.signal } ) .then((response) => response.json()) .then((response) => { setDetails(response[0]); return response; }) .then(response => { controller.abort(); setIsLoading(false); resolve(response) }) .catct(err => { reject(err) ) ) };Bu iki şekilden birini kullanabilirsin. useEffect içerisinde ise:
useEffect(() => { (async () => { await getDetails(); })(); }, [params.id]) // veya useEffect(() => { getDetails() .then(data => { console.log(data) }) }, [params.id])Bu şekilde çağırabilirsin. Bu aşamalardan sonra da useEffect içerisinde URL değiştiğinde params değişiyor mu bunu kontrol et. Eğer params değişiyorsa problem yok. Eğer params değişmiyorsa bir şeyler yanlış gidiyor olabilir. params.id değilde params olarakta deneyebilirsin. Umarım açıklayıcı olabilmişimdir. - 13-01-2023, 21:53:15Birazdan Anydesk ile bağlanıp bakayım. Özelden gönderebilirsin.endmd adlı üyeden alıntı: mesajı görüntüle
