하위 구성 요소의 상태에 액세스하는 방법에 대해 자세히 알아보기 전에이 특정 시나리오를 처리하는 더 나은 솔루션에 대한 Markus-ipse 의 답변 을 읽으십시오 .
실제로 구성 요소의 자식 상태에 액세스하려는 경우 ref
각 자식에게 호출되는 속성을 할당 할 수 있습니다 . 참조를 구현하는 두 가지 방법이 있습니다. 사용 React.createRef()
및 콜백 참조 사용 .
사용 React.createRef()
현재 React 16.3에서 참조를 사용하는 것이 권장되는 방법입니다 (자세한 내용 은 문서 참조 ). 이전 버전을 사용하는 경우 콜백 참조와 관련하여 아래를 참조하십시오.
부모 구성 요소의 생성자에서 새 참조를 만든 다음 ref
속성을 통해 자식에 할당해야 합니다.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
이런 종류의 심판에 액세스하려면 다음을 사용해야합니다.
const currentFieldEditor1 = this.FieldEditor1.current;
그러면 마운트 된 구성 요소의 인스턴스가 반환되므로 currentFieldEditor1.state
상태에 액세스하는 데 사용할 수 있습니다.
그냥 빨리 메모 대신 구성 요소의 DOM 노드에서 이러한 참조를 사용하는 경우 (예를 들어 있다고합니다 <div ref={this.divRef} />
) 다음 this.divRef.current
구성 요소 인스턴스 대신 기본 DOM 요소를 반환합니다.
콜백 참조
이 속성은 연결된 구성 요소에 대한 참조로 전달되는 콜백 함수를 사용합니다. 이 콜백은 구성 요소가 마운트 또는 마운트 해제 된 직후에 실행됩니다.
예를 들면 다음과 같습니다.
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
이 예제에서 참조는 상위 구성 요소에 저장됩니다. 코드에서이 컴포넌트를 호출하려면 다음을 사용할 수 있습니다.
this.fieldEditor1
그런 다음 this.fieldEditor1.state
상태를 얻는 데 사용 합니다.
참고로 자식 구성 요소에 액세스하기 전에 렌더링해야합니다. ^ _ ^
대신 구성 요소의 DOM 노드에서 이러한 참조를 사용하는 경우 위와 같이, (예 <div ref={(divRef) => {this.myDiv = divRef;}} />
) 다음 this.divRef
구성 요소 인스턴스 대신 기본 DOM 요소를 반환합니다.
추가 정보
React의 ref 속성에 대한 자세한 내용을 보려면 Facebook 에서이 페이지 를 확인 하십시오 .
자녀 가 "일을 일으킨다 "는 말을 사용해서는 안된다는 " 참고 문헌을 남용하지 마십시오 "섹션을 반드시 읽으십시오 state
.
이것이 도움이되기를 바랍니다 ^ _ ^
편집 : React.createRef()
심판을 만드는 방법이 추가되었습니다 . ES5 코드를 제거했습니다.