分享更有价值
被信任是一种快乐

React父组件如何调用子组件

文章页正文上

本篇内容介绍了“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(
click
this.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如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”webstorm不支持es6如何解决”的疑惑有所帮助!接下来,…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册