【发布时间】:2016-11-28 19:29:34
【问题描述】:
我有一个包含许多内部和外部链接的 React、Redux 和 Node 项目。我想让内部链接在同一页面中打开,而外部链接在新选项卡中打开。任何帮助或建议表示赞赏,
【问题讨论】:
标签: javascript node.js reactjs react-router
我有一个包含许多内部和外部链接的 React、Redux 和 Node 项目。我想让内部链接在同一页面中打开,而外部链接在新选项卡中打开。任何帮助或建议表示赞赏,
【问题讨论】:
标签: javascript node.js reactjs react-router
您可以创建一个包装器组件,它决定链接是否是外部的,并使用适当的道具呈现<a> 元素。
以这种方式实现它会提高可重用性。
为什么会提高复用性?这里举几个例子:
这是一个带有包装组件的示例:
// Define the Link wrapper component
class Link extends React.Component{
constructor(props) {
super(props);
this.state = {
target: props.target || this.getTarget(props.href)
};
}
getTarget(url) {
const siteDomain = 'stackoverflow.com';
const isExternal = (url.indexOf(siteDomain) === -1);
if (isExternal) return '_blank';
return '_self';
}
render() {
const props = Object.assign(this.props, ...this.state);
return <a {...props}>{this.props.children}</a>
}
}
// Use the Link wrapper
class Example extends React.Component{
render() {
return <Link href="http://google.com/">This is an external link</Link>
}
}
【讨论】:
外部链接应定义为a 元素,而不是Link 元素,以便您可以使用target="_blank" 在新选项卡中打开链接。
【讨论】: