我想在某些情况下禁用Link
:
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<a>Test</a>}
</li>)
}
<Link>
必须指定to
,因此我无法停用<Link>
,我必须使用<a>
答案 0 :(得分:6)
您可以设置链接的onClick属性:
render () {
return(
<li>
{
this.props.notClickable
? <Link to="/" className="disabledCursor" onClick={ () => e.preventDefault() }>Link</Link>
: <Link to="/" className="notDisabled">Link</Link>
}
</li>
);
};
然后使用cursor属性通过css禁用悬停效果。
.disabledCursor {
cursor: default;
}
我认为应该这样做?
答案 1 :(得分:2)
你的代码看起来已经很干净,很苗条。不知道为什么你想要一个更容易的&#34;办法。我完全按照你的方式去做。
但是,这里有几个选择:
这个可能就像你能得到它一样简短而甜蜜:
render() {
return (<li>
<Link to="/" style={this.props.canClick ? {pointerEvents: "none"} : null}>Test</Link>
</li>)
}
作为替代方案,您可以使用通用<a>
标记并为条件添加onClick
侦听器。如果您有许多链接要控制其状态,这可能更适合,因为您可以在所有链接上使用相同的功能。
_handleClick = () => {
if(this.props.canClick) {
this.context.router.push("/");
}
}
render() {
return (
<li>
<a onClick={this._handleClick}>Test</a>});
</li>
);
}
假设您使用context.router
,上述操作将有效。如果没有,请添加到您的班级:
static contextTypes = {
router: React.PropTypes.object
}
正如我上面提到的,我仍然认为你的方法是最好的&#34;。您可以用span替换anchor标记,以消除已禁用链接的样式(例如指针光标,悬停效果等)。
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<span>Test</span>}
</li>)
}
答案 2 :(得分:1)
简而言之,在React中禁用链接的简单方法?
<Link to="#">Text</Link>
答案 3 :(得分:0)
我认为您应该将设为= null 来设置禁用链接。
<Link to=null />
您的代码:
render() {
return (<li>
<Link to={this.props.canClick?'/goto-a-link':null} >Test</Link>
</li>)
}
答案 4 :(得分:0)
仅使URL为空似乎可以解决问题:
const url = isDisabled ? null : 'http://www.stackoverflow.com';
return (
<a href={url}>Click Me</a>
);
答案 5 :(得分:0)
最佳解决方案是将onClick()
与event
对象一起使用。只需在您的jsx中执行此操作即可:
<Link to='Everything' onClick={(e) => this._on(e)}
以及您的_onClick
函数中:
_onParent = (e) => {
e.preventDefault()
}
React中的完整示例:
import React, { Component } from 'react'
import {Link} from 'react-router-dom'
export default class List extends Component {
_onParent = (e) => {
e.preventDefault()
}
render(){
return(
<div className='link-container'>
<Link to='Something' onClick={e => this._onParent(e)}
</div>
)
}
}
答案 6 :(得分:0)
在#
道具中将to
传递给链接应该可以解决问题
您可以根据需要定义链接。如果您要禁用它,只需在#
中通过props.link
render() {
return (<li><Link to={props.link}>Test</Link></li>);
}