【发布时间】:2021-05-17 05:46:44
【问题描述】:
我有一个函数可以将 JSX 返回到一些 React 组件。我意识到我还需要在 JSX 中包含这些组件的一些状态变量。每个组件可能需要更改 JSX 或其中的值(或两者)。请参阅下面的代码。
export function getDisplayBlock(a: number) {
if (a == 1) {
return <>{title}</>;
} else if (a == 2) {
return (
<>
{title}
{subtitle}
</>
);
} else if (a == 3) {
return (
<>
<img src={companyLogo} />
{caption}
</>
);
}
}
这不起作用,因为在 getDisplayBlock 中,title、subtitle、companyLogo 和 caption 是未知的。
我考虑过的一些解决方法:
-
将所有这些 (
title,subtitle) 作为另一个参数传递给函数。这需要在每次更新这些变量时调用函数 -
返回一个字符串而不是 JSX,并用正则表达式替换参数值,然后使用
dangerouslySetInnerHTML。 -
“Hack it”(这里的好处是你调用一次函数来获取组件需要的 JSX):
export function getDisplayBlock(this: any, a: number) { if (a == 1) { return () => <>{this.state.title}</>; } else if (a == 2) { return () => ( <> {this.state.title} {this.state.subtitle} </> ); } else { return () => ( <> <img src={this.state.companyLogo} /> {this.state.caption} </> ); } }
任何想法表示赞赏!
【问题讨论】:
-
为什么这些变量在你的函数中是未知的?如果要更改,则应将它们用作状态
-
一个函数渲染三个不同的组件对我来说似乎很奇怪。但是,您可以将所有这些值作为对象的属性传递。 IE。你只有一个参数,它是一个具有所需属性的对象。
-
@TheTisi都处于调用这个函数的组件的状态
-
@FelixKling 这是建议的解决方案 1。在这种情况下,当客户端在运行时更改这些值时,它们不会在 JSX 中更新!
-
好吧,如果任何值发生变化,我希望再次调用该函数,从而生成一个新元素。它与您提出的第三个解决方案没有什么不同,只是对象是通过
this显式传递的。
标签: reactjs typescript jsx