Kullanıcının yapılacak iş öğelerinin listesini sıralayabilmesini istiyorum. Kullanıcılar bir açılır menüden bir öğe seçtiğinde, öğenin sortKey
yeni bir sürümünü oluşturacak setSortedTodos
ve ardından useEffect
ve çağrısını tetikleyecektir setSortedTodos
.
Örneğin aşağıda, tam istediğim nasıl çalışır ancak eslint eklemek için beni kışkırtan, todos
hiç useEffect
dependancy dizisi ve bunu yaparsam (beklediğiniz gibi) o sonsuz döngüye neden olur.
const [todos, setTodos] = useState([]);
const [sortKey, setSortKey] = useState('title');
const setSortedTodos = useCallback((data) => {
const cloned = data.slice(0);
const sorted = cloned.sort((a, b) => {
const v1 = a[sortKey].toLowerCase();
const v2 = b[sortKey].toLowerCase();
if (v1 < v2) {
return -1;
}
if (v1 > v2) {
return 1;
}
return 0;
});
setTodos(sorted);
}, [sortKey]);
useEffect(() => {
setSortedTodos(todos);
}, [setSortedTodos]);
Canlı Örnek:
Ben bunu mutlu etmenizi sağlayan daha iyi bir yol olması gerektiğini düşünüyorum.
eslint
atıyor?
[<>]
? Yığın Parçacıkları, JSX dahil React'i destekler; nasıl yapılacağı aşağıda açıklanmıştır . Bu şekilde insanlar önerilen çözümlerinin sonsuz döngü problemi olmadığını kontrol edebilirler ...
todos
bağımlılık dizisine neden eklemeniz gerektiğini düşündüğünü anlayabilir useEffect
ve neden yapmamanız gerektiğini görebilirsiniz. :-)
sort
arama sadece olabilir:return a[sortKey].toLowerCase().localeCompare(b[sortKey].toLowerCase());
aynı zamanda ortamda makul yerel bilgi varsa yerel bir karşılaştırma yapma avantajına sahiptir. İsterseniz, ona da yıkım atabilirsiniz: pastebin.com/7X4M1XTH