react-bootstrap使您可以使用以下方式创建模式组件:
<Modal>
<Modal.Header>
<Modal.Title>Modal heading</Modal.Title>
</Modal.Header>
<Modal.Body>
<h4>Text in a modal</h4>
</Modal.Body>
<Modal.Footer>
<Button>Close</Button>
</Modal.Footer>
</Modal>
我想组成模态组件并创建一个MyModal组件:
import * as React from 'react';
import { Modal, ModalBody, ModalProps } from 'react-bootstrap';
interface Props extends ModalProps {
plain?: boolean;
}
class MyModal extends React.Component<Props> {
static Body: typeof ModalBody;
constructor(props: Props) {
super(props);
}
render() {
const { plain, ...other } = this.props;
return (
<Modal className={plain ? 'plain' : ''} {...other} />
);
}
}
export default MyModal;
但是如果我这样使用它:
import MyModal from './MyModal';
...
render() {
return (
<MyModal plain={true}>
<MyModal.Body>
<p>Hello!</p>
</MyModal.Body>
</MyModal>
);
}
我收到以下错误:
警告:React.createElement:类型无效-预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记了从定义文件中导出组件,或者可能混淆了默认导入和命名导入。
知道发生了什么事吗?
答案 0 :(得分:1)
static Body: typeof ModalBody;
是undefined
,因此不能用作<MyModal.Body>
。
如果它是从包装的组件继承的,则应为:
static Body = ModalBody;
推断出Body
类型的地方。
使用TypeScript strict
(strictNullChecks
)编译器选项可以避免此问题。