У меня есть React HOC в TypeScript, но он не работает, когда я вызываю его из метода TSX render
. Вот пример:Можно ли вызвать HOC непосредственно из JSX/TSX в React?
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), ...}
.
Есть ли способ динамически обернуть компонент с синтаксисом, например { withRedText(<HelloWorldComponent />) }
, из файла JSX/TSX?
(машинопись 2.1.4 & Реагировать 15.4.0)
Вот версия JavaScript: http://codepen.io/mikebridge/pen/mRLvRd – mikebridge