vuereact-combined icon indicating copy to clipboard operation
vuereact-combined copied to clipboard

请问 是否支持调用子组件方法呢,比如已经嵌入了React组件。 想再vue中调用React组件的方法。

Open wangyibai opened this issue 3 years ago • 5 comments

随便写了试了下, Vue 中 可以集成React组件。 但我试了下 React 内部通过 forwardRef 与 useImperativeHandle 暴漏了 外部调用的test()方法。 正常在React 调用子组件 直接 xxxRef.test() 即可 但我在vue中 拿到vue ref, 然后 ref.test() /. ref.reactRef.test(). 以及 ref.reactInstance 都 没找到 test方法并调用成功。。

wangyibai avatar Dec 26 '22 03:12 wangyibai

@wangyibai 给你个例子

<template>
    <ReactCom ref="reactCom"/>
</template>

<script>
    import { applyReactInVue } from 'vuereact-combined'
    import ReactTest from '../../react_app/cc'
    const ReactCom = applyReactInVue(ReactTest)
    export default {
        mounted () {
            console.log(this.$refs.reactCom.reactRef)
        },
        components: {
            ReactCom
        }
    }
</script>

直接获取vue组件的ref,拿到的是桥接容器的ref,需要继续获取reactRef可以拿到React的ref

devilwjp avatar Dec 26 '22 04:12 devilwjp

ok, 我就是这么用的。 但是一直不行。
后来 刚刚试出来了。 现在这个库 目前貌似不支持memo(forwardRef(...))的方式 组件 我直接 forwardRef(...) 一次高阶是可以的

可以试下

wangyibai avatar Dec 26 '22 04:12 wangyibai

@wangyibai 好,如果是这个表现,可能是个bug

devilwjp avatar Dec 26 '22 04:12 devilwjp

@wangyibai 我测了一下,没有问题, memo(forwardRef())也可以获取ref

React组件如下:

import React, {forwardRef, memo, useImperativeHandle} from 'react'

export default memo(forwardRef(function (props, ref) {
  useImperativeHandle(ref, () => ({
    abc() {
      return 'abc'
    }
  }))
  return <div>abc</div>
}))

然后通过vue组件ref种的reactRef可以获取到react组件的ref种的abc方法

devilwjp avatar Dec 26 '22 06:12 devilwjp

好的, 我回头再检查下。

wangyibai avatar Dec 26 '22 08:12 wangyibai