gpt4 book ai didi

reactjs - 使用 Flow Typings react useRef Hook

转载 作者:行者123 更新时间:2023-12-03 13:37:40 25 4
gpt4 key购买 nike

我正在使用带有 Flow 类型的 React useRef,并且我正在尝试为第三方 Web 组件库编写一个包装器组件。

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

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 的属性,因此流程会引发错误。

Cannot assign handleChange to ref.current.changeCallback because property changeCallback is missing in HTMLElement



我尝试使用这样的属性扩展“ElementType”
ElementRef<ElementType & { changeCallback: Function }>

但这会导致以下错误:

Cannot instantiate ElementRef because object type [1] is not a React component.



Web 组件不会在更改时触发“更改”事件。它执行函数changeCallback。这是库的文档。
// 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)} />
// ...
}
}

最佳答案

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

const ref = React.useRef<null | (HTMLElement & { changeCallback: Function })>(null);

关于reactjs - 使用 Flow Typings react useRef Hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com