Dönen cevabına tam bakamamışım kusura bakma response'un direkt dizi olarak değilmiş.
import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { getDonem } from "../stores/DonemSlice";
const Donem = () => {
const dispatch = useDispatch();
const { donem } = useSelector((state) => state.donem);
useEffect(() => {
dispatch(getDonem());
}, []);
console.log(donem);
return (
<div className="input">
{donem?.data?.length > 0 ? (<div>Data var</div>) : (<div>Yükleniyor..</div>)}
</div>
);
};
export default Donem;
Bu bir hata değildir. Hatta olması gereken bir durum :)
Donem component'i dom'a yerleştiğinde state'ini güncelliyorsun.
State'in getDonem'i çağırmadan önce donem değişkeni verdiğin ilk initialState değerine sahip olur. Api'den cevap dönüp state'ini güncellediği zaman App'i render edip değişkenin değerini günceller
import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { getDonem } from "../stores/DonemSlice";
const Donem = () => {
const dispatch = useDispatch();
const { donem } = useSelector((state) => state.donem);
useEffect(() => {
dispatch(getDonem());
}, []);
console.log(donem);
return (
<div className="input">
{donem.length > 0 ? (<div>Data var</div>) : (<div>Yükleniyor..</div>)}
</div>
);
};
export default Donem;
Javascriptte objeler ve diziler değerleriyle değil ram'deki referanslarıyla temsil edilir. Yani
const a = { b:2 };
const b = a;
b ve a şuan ram'deki referansları aynı sen a veya b 'yi güncellediğinde ram'deki referansların değerini güncellemiş oluyorsun. Bu yüzden ikisinin de değeri aynı olmuş oluyor.
Çözüm 1:
Yeni bir referans numarası ile tanımlama
const a = { b:2 };
const b = { ...a };
Çözüm 2:
Objeyi json formatında tanımlama
const a = { b:2 };
const b = JSON.parse(JSON.stringify(a));
Çözüm 3:
structuredClone metodunu kullanarak tanımlama
const a = { b:2 };
const b = structuredClone(a);
cors hatasının türkçesi en basit şekilde istek atmaya çalıştığın bağlantı senin domain'ine bu bilgileri paylaşmayacağı anlamına gelir.Eğer istek atmaya çalıştığın sayfa sana aitse bu sorunu backend ile çözersin değilse hiçbir şekilde client tarafda çözemezsin
Burda yapmak istediğin şey Özyineleme (recursion) fonksiyondur. Bu fonksiyonlar ilk baktığında çok kullanışlı gibi gelsede doğru bir logic ile yazılmasa pc'ye son nefesi verdirir. Fonksiyonun yapacağı işi bittiğinde sürekli kendisini çağırmasını engellemesin yoksa dediğim gibi sonsuz döngüye girer ve bir süre sonra ram patlar
Bu daha fazla işini görecektir.
function formatDate(dateTime,seperator="-"){
const _date = new Date(dateTime);
const day = _date.getDate().toString().padStart(2,0);
const month = (_date.getMonth() + 1).toString().padStart(2,0);
const year = _date.getFullYear();
return [day,month,year].join(seperator)
}
console.log(formatDate("2019-01-15T00:00:00","/")) //Çıktı: 15/01/2019
console.log(formatDate("2019-01-22T00:00:00")) //Çıktı: 22-01-2019
Anladım kendi verilerinide FormData'ya ekleyebilirsin. İlla name ile oluşturmana gerek yok önemli olan backend'den nasıl karşıladığın
formData.append("image[]", images);
jsx formatında bir map işlemi yapacaksan callback'in bir sonucu her zaman return etmelidir.
Direkt parantez ile jsx formatında döndürebilirsin
{ilces.map((ilce) => (
<p>{ilce.adi}</p>
))}
veya
{ilces.map((ilce) => {
console.log(ilce.adi);
return(
<p>{ilce.adi}</p>)
}
)}
Eğer çoklu bir data göndereceksen name ini images[] şeklinde tanımlaman gerekir. Diğer türlü tekil olarak gönderecektir.
$(document).ready(function(){
const items = $('.container .person');
[...items].forEach(item => {
const familyId = $(item).data("family");
const sameIdCount = $(`.container .person[data-family=${familyId}]`).length;
$(item).attr("data-group",sameIdCount);
});
});