在 React 中禁用链接的更简单方法
Easier way to to disable link in React?
我想在某些情况下禁用Link
:
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 禁用悬停效果。
.disabledCursor {
cursor: default;
}
我认为这应该可以解决问题吗?
你的代码看起来已经很干净和苗条了。不知道为什么你想要一种"更简单"的方式。我会完全按照你的做法去做。
但是,这里有一些替代方案:
<小时 />使用指针事件
这个可能和你能得到的一样简短而甜蜜:
render() {
return (<li>
<Link to="/" style={this.props.canClick ? {pointerEvents: "none"} : null}>Test</Link>
</li>)
}
<小时 />使用 onClick 侦听器
或者,您可以使用通用<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
}
<小时 />更好的OP代码版本
正如我上面提到的,我仍然认为你的方法是"最好的"。您可以将锚标记替换为跨度,以摆脱禁用链接的样式(例如指针光标、悬停效果等)。
render() {
return (<li>{this.props.canClick ?
<Link to="/">Test</Link> :
<span>Test</span>}
</li>)
}
一个好的解决方案是将onClick()
与event
对象一起使用。 只需在 JSX 中执行此操作:
<Link to='Everything' onClick={(e) => this._onClick(e)}
在您的_onClick
函数中:
_onClick = (e) => {
e.preventDefault()
}
反应中的完整示例:
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>
);
简而言之,在 React 中禁用链接更简单?
<Link to="#">Text</Link>
我认为你应该 atrribute to=null 来设置禁用链接。
<Link to=null />
您的代码:
render() {
return (<li>
<Link to={this.props.canClick?'/goto-a-link':null} >Test</Link>
</li>)
}
#
to
道具传递给链接应该可以为您解决问题
您可以根据需要定义链接。 如果要禁用它,只需将#
传递props.link
render() {
return (<li><Link to={props.link}>Test</Link></li>);
}
我不喜欢任何答案。令人惊讶的是,如果您使用的是引导程序,则禁用类将使链接处于非活动状态。因此,无需将路径更改为#或任何东西。
<Link to='something/else' className='nav-link disabled'>Transactions Detail</Link>
在链接标签中使用它。我在功能组件中使用它,它工作正常。
<Link style={{pointerEvents: 'none'}}>
您可以有条件地设置 Link 组件的to
prop。当您将其设置为 #
时,该链接将被禁用。
render() {
return (
<li>
{
<Link to={`${this.props.canClick ? '/' : '#'}`}>Test</Link>
}
</li>
)
}
- 在javascript regexp中捕获多个变量的一种更简单的方法
- 调用影子原型方法的更简单/更好的方法
- 有没有更简单的方法在 Wordpress 中为多个页面模板排队脚本
- 有没有更简单的方法在JavaScript中为Object.defineProperty编写
- 从所有单词中替换,即使用破折号分隔,第一个字符用大写[更简单的方法]
- 一种在指定时间后更改的背景图像之间添加更平滑过渡的简单方法
- 有没有更简单的方法来编写此代码
- 用于捕获滚动事件的跨浏览器方法(或暂时禁用滚动的更简单方法)
- 有没有更简单的方法来检查某个父元素的 N 个子元素是什么
- 查找嵌套 xml 节点的更简单方法
- free-jqgrid:保存、加载和应用过滤器数据的更简单方法,包括过滤器工具栏文本和页面设置
- 更改多个对象的类的更简单方法
- 用javascript实现if-then-else-if-else堆栈的更简单方法是什么
- 在Javascript中提取子字符串的更简单方法
- 使用JavaScript切换字段描述的更简单方法
- 使用PHP动态创建Javascript的更简单方法
- 使用JavaScript/Ajax切换单选按钮的更简单方法
- 从数组中获取值的更简单方法
- 在 React 中禁用链接的更简单方法
- 格式化if语句的更简单方法