为了账号安全,请及时绑定邮箱和手机立即绑定

反应 on单击将类添加到单击的元素,但从其他元素中删除

反应 on单击将类添加到单击的元素,但从其他元素中删除

慕尼黑5688855 2022-09-29 15:16:38
因此,我在这里尝试实现的目标与此处所做的非常相似 在弹性框中过渡项目的灵活性增长但是我想知道如何用React做到这一点,说我有这个代码class MyComponent extends React.Component {constructor(props) {    super(props);    this.state = {        classNameToUse: ''    };    this.onElementClicked = this.onElementClicked.bind(this);}onElementClicked() {    this.setState({ classNameToUse : 'big-size'})}render() {    return (        <div>            <div className={this.state.classNameToUse} onClick={this.onElementClicked} >              something            </div>            <div className={this.state.classNameToUse onClick={this.onElementClicked} >               something else            </div>        </div>       );    }}这当然会给它们俩添加className,但我想实现的是,其中一个随着动画而变大,另一个随着崩溃而变大。如果我有2个或10个元素,这并不重要
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以在单击时设置活动索引:


// State

this.state = {

  activeIndex: null

};

// event

onElementClicked(e) {

  this.setState({ activeIndex: e.target.index })

}

// class to use

className={this.index === this.state.activeIndex ? 'big-size' : ''}


查看完整回答
反对 回复 2022-09-29
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

const { useState, useEffect } = React;


const App = () => {

  const [divs,] = useState(['blue', 'green', 'black']);

  const [selected, setSelected] = useState(null);

  

  const onClick = (id) => {

    setSelected(id);

  }

  

  return <div className="container">

    {divs.map(pr => <div key={pr} style={{background: pr}} className={`box ${pr === selected ? 'selected' : ''}`} onClick={() => onClick(pr)}></div>)}

  </div>

}


ReactDOM.render(

    <App />,

    document.getElementById('root')

  );

.container {

  display: flex;

  height: 200px;

}


.box {

  flex: 1;

  cursor: pointer;

  transition: all .3s ease-in;

}


.selected {

  flex: 2;

}

<script src="https://unpkg.com/react/umd/react.development.js"></script>

<script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

<script src="https://unpkg.com/@material-ui/core@latest/umd/material-ui.development.js"></script>

<script src="https://unpkg.com/material-ui-lab-umd@4.0.0-alpha.32/material-ui-lab.development.js"></script>

<div id="root"></div>


查看完整回答
反对 回复 2022-09-29
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号