【问题标题】:Make button behave like checkbox in React使按钮的行为类似于 React 中的复选框
【发布时间】:2021-09-16 12:03:41
【问题描述】:

我想让一个按钮在 React 中表现得像一个复选框,这样被选择/点击的按钮可以再次返回它的值,也可以再次取消选择。但是我还没有找到方法。

这是我的代码

  const handleSelectedValue = (reason: any) => {
    setSelectedValues(item => [...item, reason]);
  };
  

  // if value selected then change style
  const checkId = (id: number) => {
    return selectedValues.map(item => item.id).includes(id);
  };

 // inside jsx
 {reasons.map(item => {
      return (
        <button
           key={item.id}
           className={`mr-2 mb-2 text-xs border-2 rounded-full font-semibold border-card-primary px-3 sm:px-5 py-2 ${checkId(item.id) ? 'text-white bg-base-primary opacity-75 border-none' : 'text-base-secondary'}`}
           onClick={() => handleSelectedValue(item)}
         >
            {item.reason}
         </button>
     );
 })}

此代码有效,但所选值不能取消选择。谢谢。

【问题讨论】:

    标签: html reactjs button checkbox


    【解决方案1】:

    您必须检查数组中是否存在原因。如果存在,请将其删除,否则将其添加到列表中。你总是添加它。

    const handleSelectedValue = (values) => {
      setSelectedValues((item) => {
        let idx = item.findIndex((itm) => itm.id === values.id);
        if (idx !== -1) {
          return item.filter(itm => itm.id !== values.id)
        } else {
          return [...item, values];
        }
      });
    };
    

    【讨论】:

    • 好的,谢谢,我试过了,但是如果我选择了一个按钮,那么,如果我再次点击它,该按钮不会被取消选择
    • 这是我在codesandbox.io/s/sparkling-star-ul7wt?file=/src/App.js987654321@制作的codesandbox中的代码和演示
    • 没关系,我把它改成这样[...item.splice(item.findIndex(itm =&gt; itm === reason), 0)] 就可以了
    • 不好意思再问一下,现在如果多于一个按钮被选中,一个按钮被取消选中,那么所有按钮也都被取消选中,有什么办法可以解决吗?谢谢。
    • 我更新了我的答案,我犯了一些错误,他们解决了。检查并接受它,如果它是正确的。 @muhfaridzia
    猜你喜欢
    • 2014-06-24
    • 2011-08-15
    • 2014-12-15
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多