React父子组件互相通信的实现示例
在写项目的时候遇到了父子组件互相调用对方的方法,然后知道用什么逻辑写,但是就是没写对过,开始用的props和ref,但是报错就去用的context,context在引用的时候还是报错,所以最后还是用的props和ref,下边是实现的案例。
父组件 Father.tsx
import React, { useState, useRef } from 'react'; import Child from './components/child' const Father = ()=>{ const childRef = useRef<any>(); const params = {所需参数....} const dataList = async (params: any) => { try { const { ret, data } = await specialList(params); if (ret === 1) { 处理的逻辑.... } } catch (error) { console.log(error); } } //调用子组件的方法,看要在哪里调用就在哪里使用 await childRef?.current.infosItem(); return ( <> <Child datalist={dataList} ref={childRef}/> </> ) } export default Father;
子组件:child.tsx
import React, { useEffect, useState, forwardRef, useImperativeHandle } from 'react'; const Child = (props: any,ref: any)=>{ const { datalist } = props; const infosItem = async () => { try { const { ret, data } = await infos(params); if (ret === 1) { //处理业务逻辑... } } catch (error) { console.log(error); } }; const par = {datalist需要的参数}; await datalist(par) //在需要的时候调用 //将这个方法暴露出来,让父组件可以调用 useImperativeHandle(ref, ()=>({ infosItem })); return ( <></> ) } export default forwardRef(Child)
我这个业务是编辑,就是子组件编辑之后父组件的数据要变化,父组件编辑子组件也要变化,我开始认为就是点击编辑框上的确定之后调用对方方法,但是发现并没有起效果,一直认为还是自己通信问题,后来换了一下调用的地方,就起效果了,要放在调用编辑接口那个地方,因为异步问题。目前就用的props和ref来实现父子之间的通信的,还有其他通信方式,等用到了再更新吧。
useImperativeHandle可以看这个Hook具体含义。
到此这篇关于React父子组件互相通信的实现示例的文章就介绍到这了,更多相关React父子组件通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
react router4+redux实现路由权限控制的方法
本篇文章主要介绍了react router4+redux实现路由权限控制的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-05-05npx create-react-app xxx创建项目报错的解决办法
这篇文章主要介绍了npx create-react-app xxx创建项目报错的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-02-02React Native中TabBarIOS的简单使用方法示例
最近在学习过程中遇到了很多问题,TabBarIOS的使用就是一个,所以下面这篇文章主要给大家介绍了关于React Native中TabBarIOS简单使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。2017-10-10解决React hook 'useState' cannot be called in
这篇文章主要为大家介绍了React hook 'useState' cannot be called in a class component报错解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12
最新评论