我在TypeScript中有一個React HOC,但當我從TSX組件render
方法中調用它時似乎不起作用。這裏有一個例子:我可以直接從React中的JSX/TSX內部調用HOC嗎?
export class HelloWorldComponent extends React.Component<{}, {}> {
public render(): JSX.Element {
return <div>Hello, world!</div>;
}
}
export const withRedText = (Component) => {
return class WithRedComponent extends React.Component<{}, {}> {
public render(): JSX.Element {
return (
<div style={{color: "red"}}>
<Component {...this.props} />
</div>
);
}
};
};
export const HelloWorldComponentWithRedText = withRedText(HelloWorldComponent);
我從父調用這個文件JSX像這樣:
public render(): JSX.Element {
return (
<div>
Test #1: <HelloWorldComponent/>
Test #2: <HelloWorldComponentWithRedText />
Test #3: { withRedText(<HelloWorldComponent />) }
</div>
)
}
第一和第二測試按預期工作---文字是在第二個紅色。但第三行不會呈現任何內容。我預計第二和第三行是一樣的。
當我使用調試器對其進行檢查時,測試#2的參數是HelloWorldComponent
類型的組件,但測試#3看到Component = Object {$$typeof: Symbol(react.element), ...}
。
有沒有一種方法可以從JSX/TSX文件中動態地包裝一個類似{ withRedText(<HelloWorldComponent />) }
的語法的組件?
(打字稿2.1.4 &陣營15.4.0)
這是JavaScript的版本:http://codepen.io/mikebridge/pen/mRLvRd – mikebridge