OnChange 이벤트가 React에서 여러 번 발사되는 이유는 무엇입니까? 상태 유형 및 엄격한 패턴과 어떤 관련이 있습니까?
onChange
이벤트를 여러 번 트리거링하는 반응 : 이유를 깊이 탐색하십시오.
React Application Development에서 onChange
이벤트는 여러 번 트리거되며 종종 혼란스러워집니다. 이 기사는이 문제를 자세히 분석하고 useState
유형 및 엄격한 패턴과의 관계를 탐구합니다.
다음 샘플 코드는이 문제를 보여줍니다. 문자를 입력하고 콘솔은 로그를 두 번 인쇄합니다. 그러나 useState({})
useState(3)
(객체에서 기본 유형으로 변경)로 대체하면 로그는 한 번만 인쇄됩니다. 이는 상태 유형이 onChange
이벤트의 트리거 수에 영향을 미친다는 것을 나타냅니다.
import React, {usestate} "React"; 내보내기 기본 기능 child () { const [state, setstate] = usestate ({}); // usestate (3)로 변경하고 const onchange = (e) => {// 이벤트 매개 변수 추가에주의를 기울입니다. e Console.log ( "Onchange 트리거", state, e.target.value); // 출력 e.target.value를 추가합니다 setstate ({... 상태, 값 : e.target.value}); // 상태를 업데이트합니다 }; 반품 ( <div> <input type="text" onchange="{onChange}"> </div> ); }
이 현상은 React의 엄격한 모드와 밀접한 관련이 있습니다. 개발 환경에서 엄격한 모드를 활성화하면 REACT는 개발자가 불필요한 부작용과 같은 잠재적 인 문제를 최대한 빨리 발견 할 수 있도록 의도적으로 두 번 렌더링합니다. 이 두 렌즈는 각각 부작용과 실제 DOM 업데이트를 감지하는 데 사용됩니다.
상태가 객체 유형 인 경우 객체는 참조 유형이므로 객체의 참조 주소는 SetState 후에 변경됩니다. React는 엄격한 모드에서 이러한 변화를 감지하여 두 렌더링을 트리거하여 onChange
이벤트가 두 번 호출됩니다. 값 자체가 직접 업데이트되고 새로운 참조 주소가 생성되지 않기 때문에 원래 유형 (예 : 숫자)에는 발생하지 않습니다.
RECT 문서는 구성 요소가 가능한 한 순수한 기능으로 유지되어야한다는 것을 강조합니다. 즉, 동일한 입력 (소품, 상태 및 컨텍스트)은 항상 동일한 출력을 생성해야합니다. 엄격한 모드는 개발자가 두 가지 렌더링을 통해이 규칙 위반을 식별 할 수 있도록 도와줍니다.
따라서 개발 중에 onChange
이벤트 문제가 여러 번 트리거되는 문제가 발생하면 다음을 확인하십시오.
- 엄격한 모드가 활성화되는지 : 개발 환경에서 엄격한 모드는 두 렌더링을 유발합니다.
- 상태 유형 : 원시 유형 상태를 사용하면 참조 유형의 변경으로 인한 반복 렌더링을 피할 수 있습니다.
- 이벤트 처리 기능 : 이벤트 처리 기능의 내부 논리가 정확하고 불필요한 중복 상태 업데이트를 피하십시오. (위의 수정 코드에서 이벤트 매개 변수
e
추가하고e.target.value
사용하여 입력 값을 얻고 상태 업데이트를보다 명확하게 보여줍니다.)
반응 엄격한 패턴을 이해하고 다양한 데이터 유형에 미치는 영향은 효율적이고 예측 가능한 반응 응용 프로그램을 작성하는 데 중요합니다. 생산 환경에서는 성능 문제를 피하기 위해 엄격한 모드가 비활성화됩니다.
위 내용은 OnChange 이벤트가 React에서 여러 번 발사되는 이유는 무엇입니까? 상태 유형 및 엄격한 패턴과 어떤 관련이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

상위 카테고리 아카이브 페이지에 자식 카테고리를 표시하는 방법을 알고 싶습니까? 분류 아카이브 페이지를 사용자 정의 할 때 방문자에게 더 유용하기 위해이를 수행해야 할 수도 있습니다. 이 기사에서는 부모 카테고리 아카이브 페이지에 자식 카테고리를 쉽게 표시하는 방법을 보여줍니다. 하위 범주가 부모 카테고리 아카이브 페이지에 나타나는 이유는 무엇입니까? 부모 카테고리 아카이브 페이지에 모든 자식 카테고리를 표시하면 방문자에게 덜 일반적이고 유용 할 수 있습니다. 예를 들어, 책에 대한 WordPress 블로그를 실행하고 "테마"라는 분류법을 가지고 있다면 독자가 할 수 있도록 "소설", "논픽션"과 같은 하위 세포 체질을 추가 할 수 있습니다.

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

가상 통화 가격 상승의 요인은 다음과 같습니다. 1. 시장 수요 증가, 2. 공급 감소, 3. 긍정적 인 뉴스, 4. 낙관적 시장 감정, 5. 거시 경제 환경; 감소 요인에는 다음이 포함됩니다. 1. 시장 수요 감소, 2. 공급 증가, 3. 부정적인 뉴스의 파업, 4. 비관적 시장 감정, 5. 거시 경제 환경.

스프링 프로젝트 스타트 업에서 원형 종속성의 무작위성을 이해하십시오. Spring Project를 개발할 때는 프로젝트 시작시 원형 종속성으로 인한 무작위성에 직면 할 수 있습니다 ...

배치 쿼리에 redistemplate을 사용할 때 반환 값이 비어있는 이유는 무엇입니까? 배치 쿼리 작업에 redistemplate를 사용하는 경우 반환 된 결과가 발생할 수 있습니다 ...

다중 노드 환경에서 스프링 부츠 타이밍 작업을위한 최적화 솔루션이 스프링을 개발하고 있습니다 ...

JavaScript가 일일 프로그래밍에서 사용자 컴퓨터 하드웨어 정보를 얻을 수없는 이유에 대한 토론 많은 개발자가 JavaScript를 직접 얻을 수없는 이유에 대해 궁금합니다 ...

CONCORDIUM : 개인 정보 및 규정 준수를 고려한 공개 1 단계 블록 체인 플랫폼은 공개 1 단계 블록 체인 플랫폼입니다. 그것의 핵심은 개인 정보 및 규제 준수와 신원 확인을 영리하게 통합하는 데 있습니다. 2018 년 Lars Seier Christensen이 설립 한 플랫폼의 핵심 기술은 각 트랜잭션의 프로토콜 수준에 암호화 신원을 포함합니다. 이 독특한 디자인은 사용자 개인 정보를 보호하면서 책임 추적 성을 보장하고 블록 체인 필드의 익명 성과 규제 요구 사항 사이의 충돌 문제를 효과적으로 해결합니다. 이 문제를 완화하기 위해 Concordium은 제로 지식 증명 (ZKP) 기술을 사용하여 사용자가 불필요한 개인 정보를 공개 할 필요없이 특정 ID 속성을 확인할 수 있습니다. 이것은 모든 것을 의미합니다
