html - 如何在 React 中逐步构建 HTML?
问题描述
我正在尝试以以下格式构建一些 HTML:
<h1>Title</h1>
<p>
Always existing sentence. Optional sentence.<br/>
Always existing sentence. Optional sentence.
</p>
<p>
<span>Always existing span</span>
<span>Optional span</span>
</p>
构建/渲染它的最佳方法是什么?我最近得到的是一些 JSX:
const title = <h1>Title</h1>
const line1 = [`Always existing sentence.`];
const line2 = [`Always existing sentence.`];
if (condition) {
line1.push(`Optional sentence.`);
line2.push(`Optional sentence.`);
}
const para1 = React.createElement('p', null, [line1.join(' '), line2.join(' ')].join('<br/>'));
const spans = [React.createElement('span', null, `Always existing span`)];
if (condition2) {
spans.push(React.createElement('span', null, `Optional span`));
}
const para2 = React.createElement('p', null, spans.join('<br/>'));
return <>{title}{para1}{para2}</>;
这与呈现为的最后一段不同<p>[object Object]<br/>[object Object]</p>
。我假设因为跨度是 ReactElements。但我不知道join()
他们该怎么做。或者即使这是最好的方法。
那么,逐步构建 HTML 以在 React 中呈现的最佳方法是什么?
解决方案
我相信您正在寻找的是 JSX 的条件渲染。您对伪代码有正确的想法,您只需将其更改if (condition)
为检查状态变量的值。不清楚您使用的是类语法还是钩子,所以为了简单起见,我将提供一个使用钩子的示例。无论您使用哪种语法,同样的想法都适用。
每当 React 中的状态发生变化时,组件都会重新渲染。默认设置为false ,showOptionalContent
不显示可选内容。当showOptionalContent
更改为 true 时,组件将重新渲染并显示可选内容。您可以使用生命周期方法或useEffect
钩子来调用更改状态的方法,具体取决于您希望何时/为什么要呈现可选内容。
const [showOptionalContent, setShowOptionalContent] = setState(false);
return (
<div>
<h1>Title</h1>
<div>Always rendered content</div>
{showOptionalContent && ( // only renders when showOptionalContent === true
<div>Optionally rendered content</div>
)}
<span>Always rendered content</span>
{showOptionalContent && ( // only renders when showOptionalContent === true
<span>Optionally rendered span</span>
)}
</div>
)
推荐阅读
- javascript - 如何释放 Angular2 更改检测监控的 Array 上的内存?
- javascript - 改变值并通过 jquery 自动提交
- module - Pycharm模块安装具体目录
- javascript - 当过滤器上没有可用项目时,如何在 shuffle.js 上显示消息?
- css - 使tablesorter响应
- sql-server-2012 - 具有记录类型的数据库范围表或引用表
- java - 控制台日志中的 Firebase 错误:firebase-database-connection 错误搜索
- tensorflow - 如何表示可以属于一个分类特征的多个类别的样本
- captcha - 使用名称中的解决方案生成验证码
- prestashop - Prestashop localhost 给出拒绝连接错误