【问题标题】:React Toggle ID反应切换 ID
【发布时间】:2020-06-12 11:49:23
【问题描述】:

我有一个切换 div 的问题。这可能是一件小事,但是我第一次单击它时找不到它起作用的原因(并且面板会展开),但是再次单击时它不会关闭。也许有人可以看到为什么我第二次单击该项目时,id 没有与元素“e”一起发送?非常感谢!

class FlexPanel extends Component {
  constructor(props) {
    super(props);
    this.state = {
      toggle1: false,
      toggle2: false,
      toggle3: false,
    };
  }
  render() {
    const toggleOpen = (e) => {
      const id = e.target.id;
      const toggleId = `toggle${id}`;
      let toggleItem = this.state[toggleId];
      this.setState({
        [toggleId]: !toggleItem,
      });
    };

    const { toggle1, toggle2, toggle3 } = this.state;
    console.log(toggle1);
    return (
      <div className="panels">
        <div
          id={1}
          className={`panel panel1 ${toggle1 ? "open open-active" : "closed"} `}
          onClick={(e) => {
            toggleOpen(e);
          }}
        >
          <p>Consultes</p>
          <p>Teràpies</p>
          <p>Recolzament</p>
        </div>
        <div
          id={2}
          className={`panel panel2 ${toggle2 ? "open open-active" : "closed"} `}
          onClick={(e) => {
            toggleOpen(e);
          }}
        >
          <p>Videoconsultes</p>
          <p>en grup</p>
          <p>i individuals</p>
        </div>
        <div
          id={3}
          className={`panel panel3 ${toggle3 ? "open open-active" : "closed"} `}
          onClick={(e) => {
            toggleOpen(e);
          }}
        >
          <p>Jordi</p>
          <p>Arjó</p>
          <p>Teràpies</p>
        </div>
      </div>
    );
  }
}

export default FlexPanel;

【问题讨论】:

    标签: javascript reactjs toggle


    【解决方案1】:

    toggleOpen() 中,您需要将const id = e.target.id; 更改为const id = e.currentTarget.id

    在这里查看修改后的代码

    更多关于e.targete.currentTargetin the official documentation之间的区别

    【讨论】:

    • @CarlosdelRíoFrancés 没问题。我已经用链接更新了答案。你可以试试console.logee.targete.currentTarget看看你实际击中了什么
    【解决方案2】:

    setState需要使用更新函数

    this.setState((prevSate) => {
            let toggleItem = prevState[toggleId];
            return {
              [toggleId]: !toggleItem,
            }
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2019-06-15
      • 2021-11-15
      • 2017-10-18
      • 2017-02-27
      • 1970-01-01
      • 2019-01-16
      • 2021-01-03
      相关资源
      最近更新 更多