我使用React和流类型,并试图为第三方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的属性,因此流会引发错误。
无法将
handleChange分配给ref.current.changeCallback,因为HTMLElement中缺少属性changeCallback
我尝试用这样的属性扩展"ElementType“
ElementRef<ElementType & { changeCallback: Function }>但这会导致以下错误:
无法实例化
ElementRef,因为对象类型1不是React组件。
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)} />
// ...
}
}发布于 2019-09-26 14:49:25
解决方案是使用显式类型参数调用useRef以表示预期类型:
const ref = React.useRef<null | (HTMLElement & { changeCallback: Function })>(null);发布于 2019-09-26 13:02:33
我相信您需要使用addEventListener将回调附加到web组件:
if (ref.current) ref.current.addEventListener('change', onChange);https://stackoverflow.com/questions/58117220
复制相似问题