【问题标题】:React change state dynamicly for multiple components为多个组件动态响应更改状态
【发布时间】:2017-03-24 14:56:43
【问题描述】:

我对 React 组件有疑问。我有这个

class SidebarItem extends React.Component{
constructor(props) {
    super(props)
    this.state = { isActive: false }
}
handleClick() {
    var active = !this.state.isActive;
    this.setState({ isActive: active });
}
render() {
    var className = 'item';
    if(this.state.isActive){className = 'active item'} else {className = 'item'};
    return (
        <Link className={className} to={this.props.href} onClick={this.handleClick.bind(this)}>
            {this.props.label}
        </Link>
    );
}
}


export class Sidebar extends React.Component {
constructor(props) {
    super(props)
}
render() {
    var elements = this.props.defaults.elements.map(function (i) {
        return (
            <SidebarItem label={i.label} href={i.href} key={i.label} />
        );
    });
    return (
            <div className={this.props.defaults.class}>
                {elements}
            </div>
    );
}
};

我的目标是更改菜单活动元素的类名。我不明白,我必须如何翻译所有元素以清除活动状态并仅对一个单击的元素激活?

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    我认为您正在寻找类似的东西

    class Menu extends React.Component {
      constructor(){
        super()
        this.state = {
          items: ['Hello', 'world', 'it', 'is', 'me'],
          active: 0
        }
      }
      click(index){
        this.setState({active: index})
      }
      render(){
        const list = this.state.items.map((item,index) => {
          return <Item key={index} 
            className={this.state.active === index ? 'active' : ''} 
            text={item}
            click={this.click.bind(this, index)}
          />
        })
        return <ul>
            {list}
        </ul>
      }
    }
    
    class Item extends React.Component {
      render(){
        return <li onClick={this.props.click} 
                 className={this.props.className}>
                 {this.props.text}
               </li>        
      }
    }
    
    
    React.render(<Menu />, document.getElementById('container'));
    

    希望对你有帮助fiddle

    【讨论】:

    • 非常感谢!!这正是我需要的。但我对map 函数和this 有一些问题。无论如何,我修复了它,现在它工作得很好。再次感谢您!
    猜你喜欢
    • 2021-03-31
    • 2021-12-20
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2021-10-18
    相关资源
    最近更新 更多