亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在單擊/激活另一個活動列表項時取消選擇另一個列表項?

如何在單擊/激活另一個活動列表項時取消選擇另一個列表項?

Cats萌萌 2022-09-23 16:49:10
我得到了一個簡單的無狀態父組件,其中顯示了一個有狀態子組件列表。每個單獨的子組件都表示一個列表項,其活動狀態可以切換(真/假)?;顒恿斜眄棇⒆優榫G色,并顯示關閉(時間)?,F在,我的問題是當一個項目被選中(活動)并且我單擊另一個項目時,兩者都變得活躍,正如預期的那樣。但是,我希望取消選擇/停用上一個項目,以便一次只能激活一個項目。我嘗試將狀態提升到父級并將其作為道具傳遞下來,但這顯然會導致當我單擊一個項目時,每個項目都處于活動狀態。如何實現此目的?以下是代碼片段。import React, { Component } from "react";class ListItem extends Component {  state = {    isActive: false,  };  onToggleSelect = () =>    this.setState({      isActive: !this.state.isActive,    });  render() {    return (      <li        style={{ color: this.state.isActive && "green", cursor: "pointer" }}        onClick={this.onToggleSelect}      >        Item number {this.props.item}        {this.state.isActive && <span>&times;</span>}      </li>    );  }}function List({ itemList }) {  return (      <div>        <ul>          {            itemList.map(i => <ListItem key={i} item={i} />)          }        </ul>      </div>    );}List.defaultProps = {  itemList: [...Array(10).keys()].map(x => x + 1),};export default List;
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

我將單擊處理程序向上移動一個級別:


import React, { useState } from "react";


function ListItem({ item, isActive, handleClick }) {

    return (

      <li

        style={{ color: isActive && "green", cursor: "pointer" }}

        onClick={() => handleClick(item)}

      >

        Item number {item}

        {isActive && <span>&times;</span>}

      </li>

    );

}


function List({ itemList }) {

  const [activeListItem, setActiveListItem] = useState();


  const handleClick = (item) => activeListItem === item ? setActiveListItem() : setActiveListItem(item);


  return (

      <div>

        <ul>

          {

            itemList.map(i => <ListItem key={i} item={i} handleClick={handleClick} isActive={activeListItem === item} />)

          }

        </ul>

      </div>

    );

}


查看完整回答
反對 回復 2022-09-23
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

我認為您需要移動父組件中的狀態,以便更好地管理每個項目的狀態。


具有類組件的示例


import React, { Component } from "react";


class ListItem extends Component {


  render() {

    const isActive = this.props.activeIndex === this.props.item;

    return (

      <li

        style={{ color: isActive && "green", cursor: "pointer" }}

        onClick={() => this.props.onToggleSelect(this.props.item)}

      >

        Item number {this.props.item}

        {isActive && <span>&times;</span>}

      </li>

    );

  }

}


class List extends Component {

  state = {

    activeIndex: null,

  };


  onToggleSelect = (index) =>

    this.setState({

      activeIndex: index,

  });


  return (

      <div>

        <ul>

          {

            this.props.itemList.map(i => (

                <ListItem

                  key={i}

                  activeIndex={this.state.activeIndex}

                  item={i}

                  onToggleSelect={onToggleSelect}

                />

            ))

          }

        </ul>

      </div>

    );

}


查看完整回答
反對 回復 2022-09-23
  • 2 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號