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 sortKeyyeni bir sürümünü oluşturacak setSortedTodosve ardından useEffectve ç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, todoshiç useEffectdependancy 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.
eslintatı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 ...
todosbağımlılık dizisine neden eklemeniz gerektiğini düşündüğünü anlayabilir useEffectve neden yapmamanız gerektiğini görebilirsiniz. :-)
sortarama 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