Ale*_*lex 8 typescript reactjs
我有一个扩展的typescript类React.Component
:
class MyComponent extends React.Component<{}, {}>
{
constructor(props: {})
{
super(props);
}
public render()
{
return <span>Test</span>;
}
public MyMethod() {
console.log("Working fine");
}
}
Run Code Online (Sandbox Code Playgroud)
然后有一个地方我手动创建一个实例并将其附加到DOM:
var component = MyComponent;
var element = React.createElement(component, {}, null);
ReactDOM.render(element, myDomElementContainer);
Run Code Online (Sandbox Code Playgroud)
由于系统的体系结构限制,我需要存储对该组件的类实例的引用供以后使用,问题是我在创建的元素中找不到对我的类实例的任何引用,它只有一个引用通过酒店到班上type
.
React.createElement
只允许我提供类,ReactDOM.render
而不喜欢手动实例化的对象.
我应该如何实例化自定义组件,将其附加到DOM并获取对组件类实例的引用?
你有几个选择:
(1)使用ReactDOM.render的返回值:
var element = ReactDOM.render(<MyComponent />, myDomElementContainer);
Run Code Online (Sandbox Code Playgroud)
(2)使用React.createElement:
var element = React.createElement(MyComponent);
ReactDOM.render(element);
Run Code Online (Sandbox Code Playgroud)
(3)使用refs:
var element;
ReactDOM.render(<MyComponent ref={el => element = el } />, myDomElementContainer);
Run Code Online (Sandbox Code Playgroud)
实例将在渲染element
实例时分配MyComponent
.
对于我的场景,我使用了单例(静态变量)
export let instance = null;
class SearchDialogue extends React.Component {
constructor(props) {
super(props);
instance = this;
}
}
Run Code Online (Sandbox Code Playgroud)
然后当你需要引用它时你可以运行
import {instance as searchDialogueInstance} from './SearchDialogue'
console.log(searchDialogueInstance.someFooBar);
Run Code Online (Sandbox Code Playgroud)
请记住,只有当您利用单例设计模式时,这才有效。如果不是,那么您可以将静态变量转换为数组,然后将新实例推送到数组中。请小心,如果您还不熟悉潜在的内存陷阱,这可能会给您带来麻烦。
SearchDialogue.instances.push(this);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4984 次 |
最近记录: |