【发布时间】:2017-06-21 09:48:52
【问题描述】:
我在 TypeScript 中有一个 React HOC,但是当我从 TSX 组件 render 方法中调用它时,它似乎不起作用。这是一个例子:
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>
)
}
第一个和第二个测试按预期工作——第二个测试中的文本是红色的。但是第三行什么也不渲染。我预计第二行和第三行是相同的。
当我使用调试器单步调试时,Test #2 的参数是 HelloWorldComponent 类型的组件,但 Test #3 看到的是 Component = Object {$$typeof: Symbol(react.element), ...}。
有没有办法在 JSX/TSX 文件中使用 { withRedText(<HelloWorldComponent />) } 之类的语法动态包装组件?
(TypeScript 2.1.4 和 React 15.4.0)
【问题讨论】:
-
这是一个 JavaScript 版本:codepen.io/mikebridge/pen/mRLvRd
标签: javascript reactjs typescript jsx tsx