鍍金池/ 問(wèn)答/HTML/ react中實(shí)現(xiàn)類(lèi)似高亮的時(shí)候,如何移除其他的className?

react中實(shí)現(xiàn)類(lèi)似高亮的時(shí)候,如何移除其他的className?

問(wèn)題描述

react項(xiàng)目中實(shí)現(xiàn)一個(gè)高亮的功能,點(diǎn)擊這個(gè)DOM的時(shí)候,如何移除同級(jí)元素的className?

問(wèn)題出現(xiàn)的環(huán)境背景及自己嘗試過(guò)哪些方法

【環(huán)境】:數(shù)組循環(huán)是在父級(jí)中進(jìn)行循環(huán),循環(huán)出來(lái)的內(nèi)容是在子組件中提供。(比如:<li>這個(gè)子組件是在父組件中循環(huán)出來(lái)的,但是<li>這里面的內(nèi)容是寫(xiě)在子組件中的)

【嘗試過(guò)的方法】:
1、采用高亮的方法;
2、本來(lái)想既然高亮的在子組件中不行,那就在父組件中采用同樣的方式去做,只是點(diǎn)擊事件掛載在子組件的調(diào)用上。

相關(guān)代碼

// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)
方法一:

子組件中
constructor () {
    super();
    this.state = {
      active : 0
    }
  }
handleClick = (event)=>{
    this.setState({active: parseInt(event.target.getAttribute('index'), 10)})
}
render() {...
    return (<div onClick={this.handleClick}>...</div>)
}

方法二:

render (){
    let items = list.map(()=>{
        return <TargetSource onClick={this.handleClick} />
    })
    return (
        ...
        xx ? xxx: {items}
    )
}

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

【期待的結(jié)果】:類(lèi)似高亮

【實(shí)際看到的錯(cuò)誤】:
方法一:點(diǎn)擊的時(shí)候給當(dāng)前元素加上了高亮的效果,但是其他兄弟元素的高亮效果沒(méi)有去掉
方法二:點(diǎn)擊無(wú)任何反應(yīng)

【后話(huà)】:沒(méi)學(xué)React就開(kāi)始做React項(xiàng)目,只能自己邊做邊學(xué),所以是個(gè)小白,有不對(duì)的地方還請(qǐng)指教,不喜勿噴,謝謝。

回答
編輯回答
不討喜

在遍歷的時(shí)候把序列帶上,和state相比較就可以了
參考以下代碼

state = {
    index:0
}
handleClick = (index) => {
    this.setState({index})
}
render (){
    const {index} = this.state;   
    return (
        list.map((el,i)=>{
            return <TargetSource className={index===i?"current":""} onClick={(i)=>this.handleClick(i)} />
        })
    )
}
2017年2月3日 01:09