두 가지 종속성이 있는 useEffect가 있습니다.
으아아아그러나 currentProjects는 currentTenant를 종속성으로 갖는 useEffect에 설정됩니다.
으아아아doSomething()
取决于这两个状态,所以我想知道当 currentTenant
更改时 doSomething()
是否会运行两次:一次当 currentTenant
本身更改时,一次当 currentProjects
(由 currentTenant 控制)
) 변경됩니다. < /p>
이건 중복인가요? 이를 수행하는 더 좋은 방법은 무엇입니까? 아마도 doSomething()
useEffect 中删除 currentTenant
부터 시작하는 것 같아요.
도움을 주셔서 미리 감사드립니다.
당신이 오류를 일으키기 쉽고 불필요하게 복잡하게 만들고 있는 것 같아요. 내 경험상 사람들은 언제나 그랬다.
useEffect
현명하게 사용해 보세요. 그냥 망칠 뿐입니다.먼저
currentTenant
和currentProjects
是原语 - 我想情况还不是这样(例如名为currentProjects
항목)을 확인하여 어쨌든 종속성이 예상대로 작동하지 않도록 하세요.두 번째로, 가능하다면 코드를 인라인
doSomething()
和setCurrentProjects()
하여 실제로 어떤 변수/종속성을 사용하는지 추적하기가 더 쉽습니다. 이러한 메서드를 구성 요소에 전달했거나 여러 위치에서 사용한 경우에는 예외가 있습니다.셋째, 여러
useEffect
후크를 호출하는 실행 순서에 의존하지 마세요. 문서에는 순서가 보장되지 않으며 비동기 호출에는 별 의미가 없습니다. 서로 독립되게 만드세요. 그러므로 확실성 없이 중복성을 가정하지 마십시오. 또한 예상대로 작동하더라도 이는 시기상조인 최적화입니다. 이점은 무시할 수 있지만 코드를 이해하기가 더 어렵습니다.넷째, 구성 요소에는 아무것도 변하지 않을 것이라는 상상에 의존하고 있으며 미래의 자신과 동료는 종속성 고려 사항을 정확히 알고/기억할 것입니다. 아니면 아이디어를 더욱 복잡하게 만드는 긴 설명과 함께 의견을 제시해야 합니다.
일반적으로
useEffect
종속성은 최대한 간단하고 표현력이 풍부해야 합니다. 마법이 많지는 않지만 사람이 많아요. 아직도 (나를 포함하여) 때때로 그들을 망쳐 놓습니다. 이는 "사용 중인 모든 프리미티브만 나열" 규칙에서 대부분 벗어날 때 발생합니다.