사용자가 할 일 목록을 정렬 할 수 있기를 바랍니다. 드롭 다운에서 사용자 선택 항목은이 설정합니다 때 sortKey
의 새 버전을 만들 것이다 setSortedTodos
, 및 회전을 트리거에서 useEffect
와 전화를 setSortedTodos
.
아래 예제는 원하는 방식대로 작동하지만 eslint는 의존성 배열 에 추가하라는 메시지 todos
를 표시하며 useEffect
, 그렇게하면 무한 루프가 발생합니다 (예상 한대로).
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]);
라이브 예 :
나는 eslint를 행복하게하는 더 좋은 방법이 있어야한다고 생각합니다.
eslint
합니까?
[<>]
있습니까? 스택 스 니펫은 JSX를 포함한 React를 지원합니다. 다음 중 하나를 수행하는 방법이 있습니다. 그렇게하면 사람들이 제안한 솔루션에 무한 루프 문제가 없는지 확인할 수 있습니다.
todos
에 의존성 배열에 추가해야한다고 생각하는 이유를 이해할 useEffect
수 있으며 왜 그렇게하지 않아야하는지 알 수 있습니다. :-)
sort
콜백은 다음과 같습니다.return a[sortKey].toLowerCase().localeCompare(b[sortKey].toLowerCase());
환경에 합리적인 로캘 정보가있는 경우 로캘 비교를 수행 할 수 있다는 이점이 있습니다. 당신이 좋아하는 경우에, 당신도, 그것을 destructuring 던질 수 : pastebin.com/7X4M1XTH