reactjs - 键入'参考对象' 不可分配给类型 'string | (((实例:typeof Room_T | null)=> void)| 参考对象| 空 | 不明确的'
问题描述
当我用connect导出Room组件时,在App组件中,Room组件设置的ref不能正常工作。如果连接被删除,它可以正常工作。以下是部分主要代码演示。``
应用程序.tsx
.....
class App extends React.Component<I_PROPS, I_STATE>{
private refRoom: React.RefObject<Room_T>;
constructor(props:any){
super(props);
this.refRoom = createRef();
}
render() {
return (
<Provider store={STORE}>
<Room ref={this.refRoom} />
</Provider>
)
}
}
export default App;
``
<Room ref={this.refRoom} />
错误:类型 'RefObject<Room_T>' 不可分配给类型 'string | (((实例:typeof Room_T | null)=> void)| 参考对象 | 空 | 不明确的'。类型“RefObject<Room_T>”不可分配给类型“RefObject”。属性“当前”的类型不兼容。输入'Room_T | null' 不可分配给类型 'typeof Room_T | 无效的'。“Room_T”类型中缺少属性“原型”,但在“typeof Room_T”类型中是必需的
房间.tsx
....
import { connect } from 'react-redux';
....
export class Room_T extends React.Component {
render() {
return(
....
)
}
}
export default connect(mapStateToProps, null, null, {
forwardRef: true
})(Room_T)
dependencies
react = "16.13.1"
react-redux = "7.2.1"
redux = "4.0.5"
devDependencies
@types/react = "16.9.26"
@types/react-redux = "7.1.8"
typescript = "3.9.2"
解决方案
这与类如何也可以用作类型有关,但consts
不能。当您仅导出基类(不带connect
语句)时,您的refRoom: React.RefObject<Room_T>;
是有效的,因为它Room_T
指的是一个类。
但是,当您导出连接的组件时,它不再是类,因此不能用作类型。相反,您想使用typeof
运算符来获取实际类型,例如React.RefObject<typeof Room_T>;
希望这个片段能更好地解释这一点:
type I_PROPS = object
type I_STATE = object
class UnconnectedRoom extends React.Component {
render() {
return null
}
someMethod() {
console.log('called method')
}
}
const ConnectedRoom = connect(
() => {},
null,
(stateProps, dispatchProps) => ({}),
{
forwardRef: true,
}
)(UnconnectedRoom)
class App extends React.Component<I_PROPS, I_STATE> {
constructor(props: any) {
super(props)
this.connectedRoomRef = createRef()
this.unconnectedRoomRef = createRef()
}
render() {
console.log(this.unconnectedRoomRef.current?.someMethod())
console.log(this.connectedRoomRef.current?.someMethod())
return (
<Provider store={{}}>
<ConnectedRoom ref={this.connectedRoomRef} />
<UnconnectedRoom ref={this.unconnectedRoomRef} />
</Provider>
)
}
private connectedRoomRef: React.RefObject<typeof ConnectedRoom> // This is not a class and hence we're using the `typeof` operator
private unconnectedRoomRef: React.RefObject<UnconnectedRoom> // This is a class and can also be used as a type
}
推荐阅读
- android - 从 [object Promise] 获取数据?
- android - 如何从 Android 依赖项中排除 Android-x
- android - 是否可以使用 Koin 进行动态依赖注入
- python-3.x - 我想为我的自定义类使用 argparse/sys
- tensorflow - Tensorboard 图孤层
- oracle - 通过 Oracle 中的函数更改表并添加具有默认值的新列
- opencart - 已安装的扩展未显示扩展管理器打开购物车
- java - 如何在 Android 中使用 SQLite 从微调器中根据选定的月份和年份从列中获取值?
- google-cloud-storage - Cloud Dataproc 无法访问 Cloud Storage 存储分区
- php - 电子邮件表单正在刷新页面