React js createRef() 显示打字稿错误
React js createRef() show typescript error
一些打字稿警告
我用 typescript@3.5.2
react@16.8
mobx-react@6
mobx@5
子功能组件
import { observer as HooksObserver } from 'mobx-react-lite';
const TicketForm: React.FC<any> = (props, ref) => {
useImperativeHandle(ref, () => ({
returnDataToParentComp: () => {
console.log('hello')
}
}));
return <div></div>
}
export default HooksObserver(TicketForm,{forwardRef:true})
父class组件
export default class ParentComp extends React.Component<{}, {}> {
formRef: React.RefObject<typeof TicketForm>;
constructor(props: any) {
super(props);
this.formRef = createRef<typeof TicketForm>();
}
buttonClick = () => {
console.log(this.formRef.current!.returnDataToParentComp);
};
render() {
return (
<div>
<TicketForm ref={this.formRef} />
<button onClick={this.buttonClick}>click me </button>
</div>
);
}
}
显示
error:returnDataToParentComp undefined “MemoExoticComponent<ForwardRefExoticComponent<TicketFormStatelessProps & RefAttributes<{}>>>”
我该怎么办?
useImperativeHandle needs to be used in conjunction with forwardRef
const TicketForm: React.FC<any> = React.forwardRef(
(props, ref) => {
useImperativeHandle(ref, () => ({
returnDataToParentComp: () => {
console.log('hello')
}
}));
return <div></div>;
}
);
useImperativeHandle
存在于组件范围内,因此,无法自动将生成的对象推断到外部范围。你必须定义一个单独描述它的接口并将它提供给链的某个地方。
一些灵感:
https://medium.com/@jrwebdev/react-hooks-in-typescript-88fce7001d0d#6a30
我真的建议你避免使用命令句柄。当您别无选择时,应将它们视为最后的手段。在你的情况下,似乎你可以通过一个简单的道具逃脱。
一些打字稿警告
我用 typescript@3.5.2
react@16.8
mobx-react@6
mobx@5
子功能组件
import { observer as HooksObserver } from 'mobx-react-lite';
const TicketForm: React.FC<any> = (props, ref) => {
useImperativeHandle(ref, () => ({
returnDataToParentComp: () => {
console.log('hello')
}
}));
return <div></div>
}
export default HooksObserver(TicketForm,{forwardRef:true})
父class组件
export default class ParentComp extends React.Component<{}, {}> {
formRef: React.RefObject<typeof TicketForm>;
constructor(props: any) {
super(props);
this.formRef = createRef<typeof TicketForm>();
}
buttonClick = () => {
console.log(this.formRef.current!.returnDataToParentComp);
};
render() {
return (
<div>
<TicketForm ref={this.formRef} />
<button onClick={this.buttonClick}>click me </button>
</div>
);
}
}
显示
error:returnDataToParentComp undefined
“MemoExoticComponent<ForwardRefExoticComponent<TicketFormStatelessProps & RefAttributes<{}>>>”
我该怎么办?
useImperativeHandle needs to be used in conjunction with forwardRef
const TicketForm: React.FC<any> = React.forwardRef(
(props, ref) => {
useImperativeHandle(ref, () => ({
returnDataToParentComp: () => {
console.log('hello')
}
}));
return <div></div>;
}
);
useImperativeHandle
存在于组件范围内,因此,无法自动将生成的对象推断到外部范围。你必须定义一个单独描述它的接口并将它提供给链的某个地方。
一些灵感:
https://medium.com/@jrwebdev/react-hooks-in-typescript-88fce7001d0d#6a30
我真的建议你避免使用命令句柄。当您别无选择时,应将它们视为最后的手段。在你的情况下,似乎你可以通过一个简单的道具逃脱。