reactjs - 在 React Compoment 中有条件地使用 Gatsby Link
问题描述
我有一个反应组件,其中包含许多子组件。我想将这些子组件包装在锚标记中。现在,有时该锚标记会链接到子页面,有时它会链接到外部页面。
现在,我是 Gatsby,这意味着我是否使用<a>
标签或<Link>
组件取决于我是链接到内部页面 ( <Link>
) 还是外部页面 ( <a>
)。有关更多详细信息,请参见此处: https ://www.gatsbyjs.org/docs/gatsby-link/
现在,我想我可以通过检查我是否使用了一些定制设计的道具来实现这一点——比如:
export const ListItem = props => (
<div>
{props.goTo && <Link to={props.goTo}>}
{props.linkTo && <a href={props.linkTo}>}
<SubcompomentOne>...</SubcompomentOne>
<SubcompomentTwo>...</SubcompomentTwo>
{props.linkTo && </a> }
{prpos.goTo && </Link> }
</div>
)
这个想法是,如果我使用linkTo
道具,那么我将使用<a>
标签。如果我使用goTo
道具,那么我将使用<Link>
组件。如果我不使用任何一个——那么我将只渲染其余的子组件,而不使用<Link>
or<a>
标记。
至少,这就是我希望它工作的方式——但有些东西不能正常工作。
所以,我想知道,有没有办法根据链接是内部的还是外部的,有条件地使用<Link>
or标签?<a>
如果是这样,有什么想法吗?
谢谢。
解决方案
以这种方式打开 jsx 标记(在您的情况下)Link
并a
希望在不同的地方关闭它是不可能的。您编写的方式类似于可能在服务器端使用模板语言来呈现其他标签内的内容。
在您的情况下,您可以使用不同的方法。一种方法如下。
首先将所有孩子(如SubcompomentOne
, SubcompomentTwo
)分配给一个变量。React.Fragment
如果您有多个孩子,请使用。
const children = (<React.Fragment>
<SubcompomentOne>...</SubcompomentOne>
<SubcompomentTwo>...</SubcompomentTwo>
</React.Fragment>
);
然后您可以确定要渲染的标签以及其中的子项,类似于下面
return (<div>
{
props.goTo ?
(<Link to={props.goTo}>{children}</Link>) :
(<a href={props.linkTo}>{children}</a>)
}
</div>);
推荐阅读
- javascript - 角度复制一行表格
- javascript - Primefaces datePicker范围过滤器结束日期问题
- r - 从 R 中的网站读取 .dat 文件时出错
- kerberos - Kerberos SSO 问题 || java.lang.IllegalArgumentException:无法获得 TGT
- r - 如何使用 R flexdashboard 向现有 HTML 文档添加新页面
- r - 零调整伽马模型的连续和二项式部分的组合效应的 P 值
- .net - .net 创建 HttpClient 以访问 Intuit Quickbooks
- python - 尝试将数组存储到数据框单元格时出错
- ios - 为什么 SwiftUI @State 对于简单状态更改的执行与 @ObservedObject 不同?
- angular - Angular Ionic 数据绑定