javascript - 添加类时从所有其他元素中删除类

标签 javascript reactjs

我有这个组件:

class NavTree extends React.Component {
    // This is the left nav tree that opens each group for editing
    constructor(props) {
        super(props);

        this.state = {
            activeGroup: null // use this value to highlight the nav item in the tree
        };
        this.activateGroup = this.activateGroup.bind(this);
    }

    activateGroup(event) {
        this.setState({activeGroup: event.target.id});
        this.props.onNavChange(event.target.id);
        event.target.className = "active"; // this works
    }

    render() {
        return (
            <React.Fragment>
                <div id="nav" className="col-2">
                    <ul>
                        <li id="discovery" onClick={this.activateGroup}>Discovery</li>
                        <li id="financial" onClick={this.activateGroup}>Financials</li>
                        <li id="sales_stuff" onClick={this.activateGroup}>Sales Stuff</li>
                    </ul>
                </div>
            </React.Fragment>
        );
    }
}

此代码有效:event.target.className = "active"; ...但是从除此之外的所有其他元素中删除该类的正确方法是什么?

最佳答案

将列表元素组织到对象中并动态构建它们可能会更容易。然后将类添加为属性。所以在你的构造函数中:

this.state = {
    items: [
        {id:"discovery", text:"Discovery"},
        {id:"financial", text:"Financials"},
        {id:"sales_stuff", text:"Sales"}
    ]
    ...
}

然后在你的渲染中

...
<ul>
    {
        this.state.items.map(item=>(
            <li id={item.id} onClick={()=>this.activateGroup(item.id)} key={item.id}
              className={this.state.activeGroup == item.id && "active"}>
                {item.text}
            </li>
        ))
    }
</ul>
...

然后激活组可以是:

activateGroup(id) {
    this.setState({activeGroup: id});
    this.props.onNavChange(id);
}

这样,您就不必手动添加/删除元素中的内容,并且添加新项目会更容易(只需将条目添加到状态对象)。

关于javascript - 添加类时从所有其他元素中删除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785883/

相关文章:

javascript - 在 JQuery 中使用 JSON 填充 SELECT

javascript - 在 JQuery 中何时使用事件委托(delegate)与事件处理是否有经验法则?

javascript - 如何将 onClick 监听器注册到 GridX 中的 dijit 按钮?

javascript - 如何将数据从子组件传递到父组件

javascript - React - 如何反转具有关键唯一 id 的动态子列表的顺序

javascript - 将 chartjs-chart-treemap 与 react-chartjs-2 集成

javascript - 如何克服函数中的嵌套?

javascript - 如何使用 redux React Native 添加拉动刷新

reactjs - 如何使用 md 断点上的 Reactstrap 按顺序垂直堆叠左、右和中心列?

javascript - 正则表达式查找具有给定属性的 React JSX 元素?