我想在某些情况下禁用链接
:
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<a>Test</a>}
</li>)
}
<Link>
必须指定to
属性,因此我无法禁用<Link>
并且必须使用<a>
。
我想在某些情况下禁用链接
:
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<a>Test</a>}
</li>)
}
<Link>
必须指定to
属性,因此我无法禁用<Link>
并且必须使用<a>
。
您可以直接设置链接的onClick属性:
render () {
return(
<li>
{
this.props.notClickable
? <Link to="/" className="disabledCursor" onClick={ (event) => event.preventDefault() }>Link</Link>
: <Link to="/" className="notDisabled">Link</Link>
}
</li>
);
};
然后使用CSS中的cursor属性禁用悬停效果。
.disabledCursor {
cursor: default;
}
我想那应该就可以解决问题了?
你的代码看起来已经很干净、简略了。不确定为什么你想要一个“更容易”的方法。我会完全按照你现在的方式去做。
但是,这里有一些可供选择的替代方案:
这个可能是你能得到的最简短的方法:
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
}
如我之前所提到的,我仍认为您的方法是“最佳”的。您可以使用 span 替换锚点标签,以消除禁用链接的样式(例如指针光标、悬停效果等)。
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<span>Test</span>}
</li>)
}
onClick()
。只需在你的jsx中执行以下操作:<Link to='Everything' onClick={(e) => this._onClick(e)}
而在你的_onClick
函数中:
_onClick = (e) => {
e.preventDefault()
}
React中的完整示例:
import React, { Component } from 'react'
import {Link} from 'react-router-dom'
export default class List extends Component {
_onClick = (e) => {
e.preventDefault()
}
render(){
return(
<div className='link-container'>
<Link to='Something' onClick={e => this._onClick(e)}
</div>
)
}
}
只需将URL设置为空即可解决问题:
const url = isDisabled ? null : 'http://www.stackoverflow.com';
return (
<a href={url}>Click Me</a>
);
<Link to="#">Text</Link>
在你的链接标签中使用这个。我在函数组件中使用它,它运行良好。
<Link style={{pointerEvents: 'none'}}>
我认为你应该将 to=null 属性用于禁用链接。
<Link to=null />
你的代码:
render() {
return (<li>
<Link to={this.props.canClick?'/goto-a-link':null} >Test</Link>
</li>)
}
<Link={null}>
会带回以下错误:警告:在“Link”中,“to”属性被标记为必需,但其值为“null”。
- blueprintchrisrender() {
return (<li><Link to={props.link}>Test</Link></li>);
}
我不喜欢任何一个答案。令人惊讶的是,如果您正在使用Bootstrap,则分配禁用类将使链接无效。因此,无需更改路径为#或其他任何内容。
<Link to='something/else' className='nav-link disabled'>Transactions Detail</Link>
render() {
return (
<li>
{
<Link to={`${this.props.canClick ? '/' : '#'}`}>Test</Link>
}
</li>
)
}