React 상위 컴포넌트에서 하위 컴포넌트의 메소드를 호출하는 방법
호출 방법: 1. 클래스 구성 요소의 호출은 React.createRef(), ref의 함수 선언 또는 사용자 정의 onRef 속성을 사용하여 구현할 수 있습니다. 2. 함수 구성 요소 및 Hook 구성 요소의 호출은 useImperativeHandle 또는 forwardRef throw를 사용하여 구현할 수 있습니다. 이를 달성하려면 참조하세요.
이 튜토리얼의 운영 환경: Windows 7 시스템, React18 버전, Dell G3 컴퓨터.
React에서는 일반적으로 props 콜백을 사용하여 하위 구성 요소에 있는 상위 구성 요소의 메서드를 호출하는 경우가 많습니다. 그러나 때로는 높은 응집력을 달성하기 위해 상위 구성 요소에서 하위 구성 요소의 메서드를 호출해야 하는 경우도 있습니다. 방법은 다양하므로 필요에 따라 사용하세요.
클래스 구성 요소 내
1, React.createRef()
장점: 이해하기 쉽고, 참조 항목을 가리킵니다.
-
단점: HOC를 사용하는 하위 구성 요소는 사용할 수 없으며 실제 하위 구성 요소를 가리킬 수 없습니다.
예를 들어 mobx의 @observer로 래핑된 하위 구성 요소와 같이 일반적으로 사용되는 일부 작성 방법은 이 방법에 적용되지 않습니다.
import React, { Component } from 'react'; class Sub extends Component { callback() { console.log('执行回调'); } render() { return <div>子组件</div>; } } class Super extends Component { constructor(props) { super(props); this.sub = React.createRef(); } handleOnClick() { this.sub.callback(); } render() { return ( <div> <Sub ref={this.sub}></Sub> </div> ); } }
2. ref
- 장점: 참조 작성이 간단함
- 단점: HOC를 사용하는 하위 구성 요소를 사용할 수 없으며 실제 하위 구성 요소를 가리킬 수 없습니다(위와 동일)
사용 방법 이상 동일하지만 ref를 정의하는 방법이 다릅니다.
... <Sub ref={ref => this.sub = ref}></Sub> ...
3. props를 사용하여 onRef 속성을 맞춤설정하세요
- 장점: 하위 구성 요소가 HOC와 중첩되어 있으면 실제 하위 구성 요소를 가리킬 수도 있습니다.
- 단점: props 속성을 맞춤설정해야 함
import React, { Component } from 'react'; import { observer } from 'mobx-react' @observer class Sub extends Component { componentDidMount(){ // 将子组件指向父组件的变量 this.props.onRef && this.props.onRef(this); } callback(){ console.log("执行我") } render(){ return (<div>子组件</div>); } } class Super extends Component { handleOnClick(){ // 可以调用子组件方法 this.Sub.callback(); } render(){ return ( <div> <div onClick={this.handleOnClick}>click</div> <Sub onRef={ node => this.Sub = node }></Sub> </div>) } }
Function 구성 요소, Hook 구성 요소
1, useImperativeHandle
- 장점: 1. 작성방법이 간단하고 이해하기 쉽습니다. 2. 하위 구성 요소에 중첩된 HOC가 있는 경우 실제 하위 구성 요소를 가리킬 수도 있습니다
- 단점: 1. 소품 속성을 맞춤설정해야 합니다. 2. 노출된 메소드를 커스터마이징해야 합니다
import React, { useImperativeHandle } from 'react'; import { observer } from 'mobx-react' const Parent = () => { let ChildRef = React.createRef(); function handleOnClick() { ChildRef.current.func(); } return ( <div> <button onClick={handleOnClick}>click</button> <Child onRef={ChildRef} /> </div> ); }; const Child = observer(props => { //用useImperativeHandle暴露一些外部ref能访问的属性 useImperativeHandle(props.onRef, () => { // 需要将暴露的接口返回出去 return { func: func, }; }); function func() { console.log('执行我'); } return <div>子组件</div>; }); export default Parent;
2.forwardRef
forwardRef를 사용하여 하위 컴포넌트의 참조를 던집니다.
이 방법은 실제로 HOC를 커스터마이징하는 데 더 적합합니다. 그러나 문제는 withRouter, connect, Form.create 및 기타 메소드가 ref를 던질 수 없다는 것입니다. Child 자체가 이러한 메소드를 중첩해야 하는 경우 기본적으로 함께 사용할 수 없습니다. 전달Ref 자체는 입력 및 기타 기본 요소와 같은 하위 요소의 참조를 던지는 데에도 사용됩니다. 구성 요소의 사용 시나리오가 너무 복잡하기 때문에 구성 요소 참조를 던지는 데 적합하지 않습니다.
import React, { useRef, useImperativeHandle } from 'react'; import ReactDOM from 'react-dom'; import { observer } from 'mobx-react' const FancyInput = React.forwardRef((props, ref) => { const inputRef = useRef(); useImperativeHandle(ref, () => ({ focus: () => { inputRef.current.focus(); } })); return <input ref={inputRef} type="text" /> }); const Sub = observer(FancyInput) const App = props => { const fancyInputRef = useRef(); return ( <div> <FancyInput ref={fancyInputRef} /> <button onClick={() => fancyInputRef.current.focus()} >父组件调用子组件的 focus</button> </div> ) } export default App;
요약
상위 구성 요소가 하위 구성 요소 함수를 호출하는 경우에는 두 가지 상황이 있습니다.
- 하위 구성 요소의 HOC 중첩 없음: 직접 호출하려면 ref를 사용하는 것이 좋습니다.
- HOC 중첩의 경우: 사용자 정의 사용을 권장합니다. props
【관련 추천 : Redis 동영상 튜토리얼, 프로그래밍 교육】
위 내용은 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)

뜨거운 주제











Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

Vue.js는 오늘날 프런트엔드 개발에서 매우 인기 있는 프레임워크가 되었습니다. Vue.js가 계속 발전함에 따라 단위 테스트는 점점 더 중요해지고 있습니다. 오늘은 Vue.js 3에서 단위 테스트를 작성하는 방법을 살펴보고 몇 가지 모범 사례와 일반적인 문제 및 솔루션을 제공하겠습니다.

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

크로스 도메인은 개발 과정에서 자주 접하는 시나리오이며, 인터뷰에서도 자주 거론되는 문제이기도 합니다. 일반적인 크로스 도메인 솔루션과 그 뒤에 숨은 원칙을 익히면 개발 효율성이 향상될 뿐만 아니라 인터뷰에서도 더 나은 성과를 낼 수 있습니다.

PHP와 Vue: 프론트엔드 개발 도구의 완벽한 조합 오늘날 인터넷이 빠르게 발전하는 시대에 프론트엔드 개발은 점점 더 중요해지고 있습니다. 사용자가 웹 사이트 및 애플리케이션 경험에 대한 요구 사항이 점점 더 높아짐에 따라 프런트 엔드 개발자는 보다 효율적이고 유연한 도구를 사용하여 반응형 및 대화형 인터페이스를 만들어야 합니다. 프론트엔드 개발 분야의 두 가지 중요한 기술인 PHP와 Vue.js는 함께 사용하면 완벽한 도구라고 볼 수 있습니다. 이 기사에서는 독자가 이 두 가지를 더 잘 이해하고 적용할 수 있도록 PHP와 Vue의 조합과 자세한 코드 예제를 살펴보겠습니다.

초기에 JS는 브라우저 측에서만 실행되었습니다. 유니코드로 인코딩된 문자열은 처리하기 쉬웠지만 바이너리 및 유니코드가 아닌 인코딩된 문자열을 처리하는 것은 어려웠습니다. 그리고 바이너리는 컴퓨터의 가장 낮은 데이터 형식인 비디오/오디오/프로그램/네트워크 패키지입니다.

인터넷 기술이 발전하면서 프론트엔드 개발이 점점 더 중요해지고 있습니다. 특히 모바일 장치의 인기는 효율적이고 안정적이며 안전하고 유지 관리가 쉬운 프런트 엔드 개발 기술을 요구합니다. 빠르게 발전하는 프로그래밍 언어로서 Go 언어는 점점 더 많은 개발자가 사용하고 있습니다. 그렇다면 프론트엔드 개발에 Go 언어를 사용하는 것이 가능할까요? 다음으로 이 글에서는 프론트엔드 개발에 Go 언어를 사용하는 방법을 자세히 설명하겠습니다. 먼저 프론트엔드 개발에 Go 언어가 사용되는 이유를 살펴보겠습니다. 많은 사람들이 Go 언어가 언어라고 생각합니다.

C# 개발자로서 우리의 개발 작업에는 일반적으로 프런트엔드와 백엔드 개발이 포함됩니다. 기술이 발전하고 프로젝트의 복잡성이 증가함에 따라 프런트엔드와 백엔드의 공동 개발이 점점 더 중요해지고 복잡해졌습니다. 이 문서에서는 C# 개발자가 개발 작업을 보다 효율적으로 완료하는 데 도움이 되는 몇 가지 프런트 엔드 및 백엔드 공동 개발 기술을 공유합니다. 인터페이스 사양을 결정한 후 프런트엔드와 백엔드의 공동 개발은 API 인터페이스의 상호 작용과 분리될 수 없습니다. 프론트엔드와 백엔드 협업 개발이 원활하게 진행되기 위해서는 가장 중요한 것은 좋은 인터페이스 사양을 정의하는 것입니다. 인터페이스 사양에는 인터페이스 이름이 포함됩니다.
