react 魔法之createPortal(复用子组件已写好的代码到父组件)

  你是不是遇到过这样的问题,花费了很多精力在一个子组件中写好了一段代码,比如一个逻辑复杂的按钮,离发布已经不久了,产品这时告诉你这个按钮需要移动下位置,比如移动到父组件的页面顶部。从产品的角度,不就移个位置,有什么难的。但其实移动到上级甚至上上级的组件中,当前在子组件维护的所有状态,调用的方法是不是都要迁移过去,顿觉好坑。那有没有办法,用最少的改动实现产品的要求呢。
这里提供两个方法,有一个方法也是多数人都能想到的方案。
发挥下主观能动性,先想一想你的方案

方案一:通过css定位实现,缺陷,如果有其它元素占用页面空间,就要重新改变定位值

方案二:就是我要说明的createPortal用法,大胆尝试一下,你会发现新大陆
导入:import { createPortal } from ‘react-dom’;
子组件:

 <Col flex="110px">
  	{/* createPortal 暴露给父组件使用 */}
   	{document.getElementById('portalElement') &&
     createPortal(
       <div className=“btn”}>
        ...大段代码
       </div>,
       document.getElementById('portalMeeting') as HTMLDivElement,
     )}
 </Col>

父组件

<div id="portalElement" style={{ marginLeft: 8 }}>
  {' '}
</div>

详情去官网查看具体用法 官网

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中,组件可以通过props将方法传递给父组件,从而实现在组件中调用父组件的方法。具体实现步骤如下: 1.在父组件中定义一个方法,该方法将作为props传递给组件。 2.在组件中通过this.props来访问父组件传递过来的方法。 3.在组件中调用父组件的方法,可以通过在组件中定义一个事件处理函数,并在该函数中调用父组件传递过来的方法。 下面是一个示例代码: 父组件: ```javascript import React, { Component } from 'react'; import Child from './Child'; class Parent extends Component { handleChildEvent = (child) => { console.log('Child component mounted:', child); } render() { return ( <div> <Child onChildEvent={this.handleChildEvent} /> </div> ); } } export default Parent; ``` 组件: ```javascript import React, { Component } from 'react'; class Child extends Component { componentDidMount() { this.props.onChildEvent(this); } sendMessage = () => { console.log('sending message'); } render() { return ( <span>Child</span> ); } } export default Child; ``` 在上面的示例代码中,父组件定义了一个handleChildEvent方法,并将该方法通过props传递给组件。在组件中,通过componentDidMount方法来调用父组件传递过来的方法,并将当前组件实例作为参数传递给该方法。在组件中,还定义了一个sendMessage方法,该方法可以在组件中触发,并通过调用父组件传递过来的方法来实现在组件中调用父组件的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值