javascript - 在反应绑定中呈现包含 JSX 的字符串
问题描述
我发现了很多与此类似的问题,但没有一个能真正回答我的问题。
我有一个包含 JSX 模板的字符串来创建链接,并且需要在Text
组件内的绑定中呈现它。下面我有一些相同的文本,所以你可以大致看到我所拥有的。
当前{content}
将呈现为This string has JSX: [Object, object]
. 我如何让它实际渲染FAQLink
。
我试过的
我试过使用<React.Fragment>{content}<React.Fragment>
没有运气。
function TooltipContent() {
const FAQLink = () => (
<Link
color="teal40"
hoverColor="teal30"
underlined
to={paths.resourcePage({ slug: 'frequently-asked-questions' })}
>
FAQ
</Link>
);
const contentArray = [
`This string has JSX: ${<FAQLink />}`,
`Another possible string`
];
let content;
if (variant === 'risk') {
content = contentArray[0];
} else {
content = contentArray[1];
}
return (
<Text textAlign="left" p={2}>
{content}
</Text>
);
}
此代码确实有效,但不适用于我的情况
function TooltipContent() {
const FAQLink = () => (
<Link
color="teal40"
hoverColor="teal30"
underlined
to={paths.resourcePage({ slug: 'frequently-asked-questions' })}
>
FAQ
</Link>
);
return (
<Text textAlign="left" p={2}>
This string has JSX: <FAQLink />
</Text>
);
}
解决方案
不幸的是,template literals
不适用于React
组件。
但是,您可以利用React.Fragment
它来完成您需要的操作,如下例所示:
function TooltipContent(props) {
const { variant = "default" } = props;
const FAQLink = () => <a href="https://google.com">I am a link!</a>;
let content;
switch (variant) {
case "risk":
content = (
<React.Fragment>
RISK! <br />
<FAQLink />
</React.Fragment>
);
break;
case "no-risk":
content = "NO RISK";
break;
default:
content = variant;
}
return <p>{content}</p>;
}
这是一个工作示例:
推荐阅读
- html - 网站视口在 Bootstrap 4 上的 Safari 浏览器上仍然可以缩放和捏合
- javascript - Vue.js:如何从拦截器代表组件发出请求?
- php - 'user'@'localhost' 的访问被拒绝
- azure - 如何选择 Kubernetes Ingress 控制器
- c++ - Windows 10 忽略 setsockopt IP_TOS
- javascript - 在按钮单击事件上获取当前嵌入的 pdf 页码
- php - POST 值 Symfony 请求对象
- python - 如何在另一个 Windows 10 上部署 python flask 应用程序?
- c++ - 指针值数组在函数结束时被破坏,有人能告诉我为什么吗?
- php - PHP str_replace 替换字符串中不匹配的文本