React 에서 Ref 의 사용 방법 에 대한 상세 한 설명
React 에서 Ref 의 사용 React v 16.6.3
전형 적 인 React 데이터 흐름 에서 props 는 부모 구성 요소 와 하위 구성 요소 가 상호작용 하 는 유일한 방식 입 니 다.하위 항목 을 수정 하려 면 new props 를 사용 하여 다시 보 여 주 십시오.그러나 어떤 경우 에는 전형 적 인 데이터 흐름 외 에 하위 항목 을 강제로 수정 해 야 한다.수정 할 하위 항목 은 React 구성 요소 의 인 스 턴 스 일 수도 있 고 DOM 요소 일 수도 있 습 니 다.이 두 가지 상황 에 대해 React 는 api 를 제공 합 니 다.
refs 사용 시간
refs 는 좋 은 사례 가 있 습 니 다.
*Refs 를 과도 하 게 사용 하지 마 세 요
이전 버 전 API:문자열 참조
이전에 React 를 사용 한 적 이 있다 면 ref 속성 은 문자열'textInput'이 고 DOM 노드 는 this.refs.textInput 으로 접근 할 수 있 습 니 다.문자열 인용 에 문제 가 있어 서 남 겨 진 문제 로 여 겨 지 므 로 미래의 한 버 전에 서 삭제 할 수 있 습 니 다.
리 셋 참조
구성 요소 가 설 치 될 때 React 는 DOM 요 소 를 사용 하여 ref 리 셋 을 호출 하고 마 운 트 해제 할 때 null 을 호출 합 니 다.
componentDid Mount 나 componentDid Update 가 실행 되 기 전에 Refs 는 최신 임 을 보증 합 니 다.
class CustomTextInput extends React.Component {
constructor(props) {
super(props);
this.textInput = null;
this.setTextInputRef = element => {
this.textInput = element;
};
this.focusTextInput = () => {
// Focus the text input using the raw DOM API
if (this.textInput) this.textInput.focus();
};
}
componentDidMount() {
// autofocus the input on mount
this.focusTextInput();
}
render() {
// Use the `ref` callback to store a reference to the text input DOM
// element in an instance field (for example, this.textInput).
return (
<div>
<input
type="text"
ref={this.setTextInputRef}
/>
<input
type="button"
value="Focus the text input"
onClick={this.focusTextInput}
/>
</div>
);
}
}
refs 예--클릭 하여 input 초점 가 져 오기
class Example extends React.Component {
handleClick() {
// DOM API
this.refs.myInput.focus
();
}
render() {
// DOM ,ref this.refs
return (
<div>
<input type="text" ref="myInput" />
<input
type="button"
value=" "
onClick={this.handleClick.bind(this)}
/>
</div>
);
}
}
React.createRef()사용 하기React.createRef()React 16.3 에 도 입 된 API.초기 버 전의 React 를 사용 하고 있다 면 리 셋 인용 을 사용 하 는 것 을 권장 합 니 다.
React.createRef()만 들 기
Refs 는 속성 을 사용 하여 만 든 것 입 니 다.React.createRef()는 ref 속성 을 통 해 React 요소 에 추 가 됩 니 다.구성 요 소 를 구성 할 때 전체 구성 요소 에서 참조 할 수 있 도록 Refs 를 인 스 턴 스 속성 에 할당 합 니 다.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return <div ref={this.myRef} />;
}
}
ref 방문ref 가 요소 에 전 달 될 때 render 는 이 노드 에 대한 인용 을 currentref 의 속성 에 접근 할 수 있 습 니 다.
const node = this.myRef.current;
ref 의 값 은 노드 의 유형 에 따라 다르다
class CustomTextInput extends React.Component {
constructor(props) {
super(props);
// create a ref to store the textInput DOM element
this.textInput = React.createRef();
this.focusTextInput = this.focusTextInput.bind(this);
}
focusTextInput() {
// Explicitly focus the text input using the raw DOM API
// Note: we're accessing "current" to get the DOM node
this.textInput.current.focus();
}
render() {
// tell React that we want to associate the <input> ref
// with the `textInput` that we created in the constructor
return (
<div>
<input
type="text"
ref={this.textInput} />
<input
type="button"
value="Focus the text input"
onClick={this.focusTextInput}
/>
</div>
);
}
}
current 구성 요소 가 설 치 될 때 React 는 이 속성 에 DOM 요 소 를 할당 하고 null 은 마 운 트 해제 할 때 다시 할당 합 니 다.ref 업데이트 가 발생 하기 전에 componentDidMount 또는 componentDidUpdate 수명 주기 방법.함수 구성 요소 에 ref 속성 을 사용 할 수 없습니다.
function MyFunctionComponent() {
return <input />;
}
class Parent extends React.Component {
constructor(props) {
super(props);
this.textInput = React.createRef();
}
render() {
// This will *not* work!
return (
<MyFunctionComponent ref={this.textInput} />
);
}
}
**인용 이 필요 하 다 면,생명주기 방법 이나 상태 가 필요 할 때 처럼 구성 요 소 를 클래스 로 변환 해 야 합 니 다.단,DOM 요소 나 클래스 구성 요 소 를 참조 하면 함수 구성 요소 에서 이 ref 속성 을 사용 할 수 있 습 니 다:**
function CustomTextInput(props) {
// textInput must be declared here so the ref can refer to it
let textInput = React.createRef();
function handleClick() {
textInput.current.focus();
}
return (
<div>
<input
type="text"
ref={textInput} />
<input
type="button"
value="Focus the text input"
onClick={handleClick}
/>
</div>
);
}
부모 구성 요소 에 DOM 인용 공개극소수의 경우 부모 구성 요소 에서 하위 노드 의 DOM 노드 에 접근 하 기 를 원할 수도 있 습 니 다.일반적으로 이렇게 하 는 것 을 권장 하지 않 습 니 다.구성 요소 의 패 키 징 을 파괴 할 수 있 지만,때때로 초점 을 터치 하거나 하위 DOM 노드 의 크기 나 위 치 를 측정 하 는 데 사용 할 수 있 습 니 다.
하위 구성 요소 에 인용 을 추가 할 수 있 지만 이것 은 DOM 노드 가 아 닌 구성 요소 인 스 턴 스 만 얻 을 수 있 기 때문에 이상 적 인 해결 방안 이 아 닙 니 다.이 밖 에 기능 구성 요소 에는 적용 되 지 않 습 니 다.
React 16.3 또는 더 높 은 버 전 을 사용 하면 ref forwarding 을 사용 하 는 것 을 권장 합 니 다.리 트 윗 을 참조 하면 구성 요소 가 모든 하위 구성 요소 의 인용 을 자신의 구성 요소 로 공개 하 는 것 을 선택 할 수 있 습 니 다.ref 전송 문서 에서 하위 DOM 노드 를 부모 구성 요소 에 공개 하 는 방법 에 대한 상세 한 예 시 를 찾 을 수 있 습 니 다.
React 16.2 또는 더 낮은 버 전 을 사용 하거나 ref 퍼 가기 보다 더 유연성 이 필요 하 다 면 이 대체 방법 을 사용 하여 ref 를 서로 다른 이름 의 prop 로 명확 하 게 전달 할 수 있 습 니 다.
가능 하 다 면 DOM 노드 를 노출 하지 않 는 것 이 좋 지만 유용 한 탈출 구 일 수 있 습 니 다.이 방법 은 하위 구성 요소 에 코드 를 추가 해 야 합 니 다.하위 구성 요 소 를 완전히 제어 할 수 없다 면 마지막 옵션 은 findDOMNode()를 사용 하지만 StrictMode 를 사용 하 는 것 을 권장 하지 않 습 니 다.
본 고 에서 말 한 것 이 여러분 의 react 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바삭바삭하고 간단한 결제 페이지 만들기먼저 Next.js에서 프로젝트를 만듭니다. Vercel & Next.js가 매우 편하기 때문에 최근에는이 구성을 사용하고 있습니다. 그런 다음 Tailwind CSS를 넣습니다. Tailwind CSS를 사용하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.