本篇内容介绍了“React父组件如何调用子组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 调用方法:1、类组件中的调用可以利用React.createRef()、ref的函数式声明或props自定义onRef属性来实现;2、函数组件、Hook组件中的调用可以利用useImperativeHandle或forwardRef抛出子组件ref来实现。在React中,我们经常在子组件中调用父组件的方法,一般用props回调即可。但是有时候也需要在父组件中调用子组件的方法,通过这种方法实现高内聚。有多种方法,请按需服用。优点:通俗易懂,用ref指向。缺点:使用了HOC的子组件不可用,无法指向真是子组件比如一些常用的写法,mobx的@observer包裹的子组件就不适用此方法。
importReact,{Component}from'react'; classSubextendsComponent{ callback(){ console.log('执行回调'); } render(){ return子组件; } } classSuperextendsCompone免费云主机、域名nt{ constructor(props){ super(props); this.sub=React.createRef(); } handleOnClick(){ this.sub.callback(); } render(){ return(); } }
优点:ref写法简洁缺点:使用了HOC的子组件不可用,无法指向真是子组件(同上)使用方法和上述的一样,就是定义ref的方式不同。
... this.sub=ref}> ...
优点:假如子组件是嵌套了HOC,也可以指向真实子组件。缺点:需要自定义props属性
importReact,{Component}from'react'; import{observer}from'mobx-react' @observer classSubextendsComponent{ componentDidMount(){ //将子组件指向父组件的变量 this.props.onRef&&this.props.onRef(this); } callback(){ console.log("执行我") } render(){ return(子组件); } } classSuperextendsComponent{ handleOnClick(){ //可以调用子组件方法 this.Sub.callback(); } render(){ return() } }clickthis.Sub=node}>
优点:
1、写法简单易懂
2、假如子组件嵌套了HOC,也可以指向真实子组件缺点:
1、需要自定义props属性
2、需要自定义暴露的方法
importReact,{useImperativeHandle}from'react'; import{observer}from'mobx-react' constParent=()=>{ letChildRef=React.createRef(); functionhandleOnClick(){ ChildRef.current.func(); } return(); }; constChild=observer(props=>{ //用useImperativeHandle暴露一些外部ref能访问的属性 useImperativeHandle(props.onRef,()=>{ //需要将暴露的接口返回出去 return{ func:func, }; }); functionfunc(){ console.log('执行我'); } return 子组件; }); exportdefaultParent;
使用forwardRef抛出子组件的ref这个方法其实更适合自定义HOC。但问题是,withRouter、connect、Form.create等方法并不能抛出ref,假如Child本身就需要嵌套这些方法,那基本就不能混着用了。forwardRef本身也是用来抛出子元素,如input等原生元素的ref的,并不适合做组件ref抛出,因为组件的使用场景太复杂了。
importReact,{useRef,useImperativeHandle}from'react'; importReactDOMfrom'react-dom'; import{observer}from'mobx-react' constFancyInput=React.forwardRef((props,ref)=>{ constinputRef=useRef(); useImperativeHandle(ref,()=>({ focus:()=>{ inputRef.current.focus(); } })); return }); constSub=observer(FancyInput) constApp=props=>{ constfancyInputRef=useRef(); return() } exportdefaultApp;
“React父组件如何调用子组件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要介绍“webstorm不支持es6如何解决”,在日常操作中,相信很多人在webstorm不支持es6如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”webstorm不支持es6如何解决”的疑惑有所帮助!接下来,…