React Hook을 구현하는 데 실수를 저질렀고 백엔드에서 서비스 거부를 받았습니다.
3674 단어 reactfirebasejavascript
function Page() {
const [meetings, setMeetings] = useState([]);
useEffect(() => {
return firebase.firestore().collection('/meetings').onSnapshot(query => {
setMeeting( query.docs.map(m => m.data()) );
});
});
return (
<ul>
{meetings.map(m => <li>{m.title}</li>}
</ul>
)
}
효과는 상태 변경에 의존하지 않으므로 두 번째 매개변수를 생략했습니다. 내가 깨닫지 못한 것은
setMeeting
가 호출될 때마다 함수의 본문이 다시 실행되어 데이터 가져오기에 루프가 발생한다는 것입니다.그래. Firebase의 무료 등급은 몇 분의 개발 작업에서 초과한 50,000개의 읽기/일 할당량을 제공합니다. 추적하는 것도 고통이었습니다. Chrome devtools의 Net 탭이 Firebase에 대한 요청을 두드리고 있다는 것을 깨달았을 때 성능 탭으로 서둘러서 "오프라인 모드"로 이동해야 했습니다. 그런 다음 요청 중 하나의 페이로드를 살펴보고 어떤 데이터가 요청되었는지 파악하는 시간을 가졌습니다.
수정 사항은 componentDidMount 및 componentWillUnmount와 같이 한 번만 실행되어야 함을 나타내기 위해 빈 대괄호를 추가하는 것입니다(firebase 호출의 반환은 마운트 해제하려는 리스너입니다).
useEffect(() => {
// return firebase...
}, []) // this guy
문제를 해결한 후 일시 중지하고 근본적인 문제에 대해 생각했습니다.
해피 해킹,
참고문헌
Reference
이 문제에 관하여(React Hook을 구현하는 데 실수를 저질렀고 백엔드에서 서비스 거부를 받았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adamwknox/i-made-a-mistake-implementing-a-react-hook-and-got-a-denial-of-service-from-my-backend-5cji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)