首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用流动台风反应useRef钩

用流动台风反应useRef钩
EN

Stack Overflow用户
提问于 2019-09-26 12:51:19
回答 2查看 4K关注 0票数 9

我使用React和流类型,并试图为第三方web组件库编写包装器组件。

web组件需要一个changeCallback函数,我正在使用ref将其分配给ref。

代码语言:javascript
复制
function RadioButtonGroup({ onChange, children }) {
    const ref: { current: null | ElementRef<ElementType> = React.useRef(null);

    React.useEffect(() => {
        if (ref.current) ref.current.changeCallback = onChange;
    }, [onChange]);

    return <web-component ref={ref}>{children}</web-component>
}

由于HTMLElement不包含名为changeCallback的属性,因此流会引发错误。

无法将handleChange分配给ref.current.changeCallback,因为HTMLElement中缺少属性changeCallback

我尝试用这样的属性扩展"ElementType“

代码语言:javascript
复制
ElementRef<ElementType & { changeCallback: Function }>

但这会导致以下错误:

无法实例化ElementRef,因为对象类型1不是React组件。

web组件不会在更改时触发“更改”事件。它执行函数changeCallback。这是图书馆的文档。

代码语言:javascript
复制
// MyComponent.js

class MyComponent extends Component {

    constructor() {
        // ...

        // Create a ref
        this.sdxSelectEl = React.createRef();
    }

    componentDidMount() {
        // Attach callback here to ref
        this.sdxSelectEl.selectCallback = (selection) => console.log(selection);
    }

    render() {
        // ...
        <sdx-select ref={el => (this.sdxSelectEl = el)} />
        // ...
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-26 14:49:25

解决方案是使用显式类型参数调用useRef以表示预期类型:

代码语言:javascript
复制
const ref = React.useRef<null | (HTMLElement & { changeCallback: Function })>(null);
票数 6
EN

Stack Overflow用户

发布于 2019-09-26 13:02:33

我相信您需要使用addEventListener将回调附加到web组件:

代码语言:javascript
复制
if (ref.current) ref.current.addEventListener('change', onChange);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58117220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档