微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在反应中的两个列表项之间切换 className

如何解决如何在反应中的两个列表项之间切换 className

我有一个未排序的列表。如果 li 1 单击,className="selected" 将被分配给它。如果点击 li 2,className="selected" 将被分配给它,并且 className="selected" 将从 li 1 中删除。我该怎么做?提前感谢您的帮助。

 <ul>
      <li role="option" aria-selected="false">
        yes
      </li>
      <li role="option" aria-selected="false">
        no
      </li>
  </ul>

解决方法

您需要有一个状态变量来保持当前选定的项目。然后根据状态变量检查每个 li。

 const selectionArray = ['yes','no'];
  const [selectedITem,setSelectedItem] = useState('yes');
  return (
    <ul>
      {selectionArray.map((item) => {
        return (
          <li
            onClick={() => {
              setSelectedItem(item);
            }}
            className={selectedITem === item ? 'selected' : ''}
            key={'selection-' + item}
            role="option"
            aria-selected="false"
          >
            {item}
          </li>
        );
      })}
    </ul>
  );
,

需要在 li 的 OnClick 上调用函数并在 li 中添加值,然后您将获得 li 的值。见下文:

const [selectedMenu,setSelectedMenu] = useState([]);

  function onClickMenu(e) {
   console.log("val:",e.target.value)
   setSelectedMenu(e.target.value)
  }

   <ul>
    <li role="option" value="1" aria-selected="false" onClick={(e) => onClickMenu(e)} 
    className={selectedMenu === 1 ? 'selected' : ''}>
      yes
    </li>
    <li role="option" value="2" onClick={(e) => onClickMenu(e)}  aria-selected="false" className={selectedMenu === 2 ? 'selected' : ''}>
      no
    </li>
  </ul>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。