reactjs - 使用反应内联样式切换不同选项卡上的活动状态
问题描述
我来自,jQuery
所以我在理解如何解决这个问题时遇到了问题。
我正在用 React 编写一个应用程序并且我正在使用inline
样式,即每个组件都有自己的样式,并且它们是JS
用CSS
.
现在,我有五个选项卡,我想.is-active
在单击其中一个时切换一个。所以在点击时,我必须.is-active
从旧类中删除,并将其添加到点击的类中。我不确定如何使用inline
样式来解决这个问题,因为一切inline
都没有实际的类可供我添加到我的选项卡中。
现在,当我渲染每个选项卡(我有一个单独的组件)时,我还传入一个isActive
布尔值,它告诉组件在有或没有活动类的情况下进行渲染。代码示例:
HTML:
<Tab isActive={true} />
<Tab isActive={false} />
JS:
<div className="tab" style={(this.props.isActive !== true) ? style.tab : {...style.tab, ...style.active}}>
但是我完全不知道如何在onclick上执行此操作。我是否必须打破内联样式概念才能做到这一点,还是有一个聪明的解决方案?我在网上没有找到任何简单的东西。谢谢!
解决方案
您可以将状态用于此类实现。一个简短的实现如下:
假设你有两个标签。你应该
constructor
像这样定义状态:constructor(props){ super(props) this.state = { tabs = [ { tab1: { active: true } }, { tab2: { active: false} } ] } this.tabToggle = this.tabToggle.bind(this) }
将选项卡元素放入
render()
:render() { return ( <div> { this.state.tabs.map((tab, index) => <div className={'tab ' + tab.active ? 'active' : ''}> onClick={()=>this.tabToggle(index)}> </div> )} </div> ) }
像这样定义切换功能:
tabToggle(tabIndex) { let tabs = this.state.tabs tabs[tabIndex] = true tabs.map((tab, index) => { if (index !== tabIndex) tab.active = false }) this.setState( tabs ) }
部分代码的一些参考:
推荐阅读
- kerberos - KerberosAuthenticationHandler 抛出 javax.security.auth.login.LoginException:当 kinit 正常时没有要存储的密钥
- django - 将更新视图中的两个模型传递给同一个模板
- powershell - 过滤单个参数多个值
- python-3.x - 对具有不同子列表长度的列表进行排序
- windows - 无论如何要调试带有安全启动的Windows内核吗?
- javascript - AG-Grid 拖放单元格
- docker - 使用 CircleCi 自动化 AWS EC2 中的 docker 容器
- vue.js - 如何设置离子输入的值?
- python-3.x - 通过有状态对象获取渐变
- kotlin - 在基类初始化(直接或间接)中使用覆盖属性的示例是什么?