【问题标题】:Filtering with checkboxes with useState使用 useState 过滤复选框
【发布时间】:2021-10-25 16:03:44
【问题描述】:

我有很多东西

const reportsData = [
    {
      name: 'Walter',
      Laudos: 1,
    },
    {
      name: 'John',
      Laudos: 20,
    },
  ]

然后在我的 react 组件上,我需要在单击复选框时设置一个状态,使我的列表仅过滤该名称。喜欢:

const [searchUser, setSearchUser] = useState('')

{reportsData
                .filter((value: any) => {
                  if (searchUser == '') {
                    return value
                  } else if (
                    value.name
                      .toLowerCase()
                      .includes(searchUser.toLowerCase())
                  ) {
                    return value
                  }
                })

然后在复选框上

<input
  type="checkbox"
  checked={john} // just for example
  onChange={john} // just for example
  className="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>

我需要当我按下这个时,它会将searchUser 的值更改为“John”。

在这里查看了很多回复,但每个回复都很混乱 asf 或使用 this.setState 而不是 useState。

我怎样才能做到这一点?

【问题讨论】:

  • 如果你的意思是当用户按下按钮时你想将'john'文本添加到搜索状态,在按钮onChange={() =&gt; { setSearchUser('john') } }中使用这个
  • 不是按钮,是checkbox 类型的输入。只是添加它不起作用,因为当我按下复选框时,是的,它起作用了,但是当我将其选中时,数组上的过滤器不会返回到默认值。我需要那个,当我选中复选框时,setSearchUse 返回到(' ')
  • 对不起,我不知道你想把它改回原来的状态,我现在在答案部分提供答案

标签: javascript reactjs checkbox state use-state


【解决方案1】:

以这种方式定义状态:

const [searchUser, setSearchUser] = useState([])

然后以这种方式添加每个复选框:

<input
  type="checkbox"
  thisUser="john" // just change this name to make checkbox for another user
  defaultChecked={false}
  onChange={changeSearchUser}
  className="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>

将此函数添加到您的组件中:

function changeSearchUser(e){
  if (e.target.checked) {
    setSearchUser(previousSreach => [...previousSreach, e.target.thisUser])
  }
  else {
    setSearchUser(previousSreach => {
      const index = previousSreach.indexOf(e.target.thisUser)
      if (index > -1) {
        return previousSreach.splice(index, 1);
      }
    })
  }
}

【讨论】:

  • 嗯,它有效。但并不完全像我预期的那样。因为它仅在我选择一个复选框时才有效,并且我需要它与多个复选框一起使用。就像,我有 10 个用户,我需要能够检查 2、3、4 个复选框,并且它会将它们全部选中。
  • 您是想使用'john,alex,test' 之类的东西对它们进行拆分,还是制作一组选中的复选框,例如['john', 'alex', 'test']
  • 我不明白如何应用这个。你能在代码上显示吗?对于过滤器本身和复选框onChange?
  • 当然,我会更新答案
  • 没用。说它找不到“数组”。我尝试更改为 Array,但后来我得到:TypeError: Array.indexOf is not a function
猜你喜欢
  • 2021-12-18
  • 2012-02-06
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2012-06-12
  • 2011-06-19
  • 1970-01-01
相关资源
最近更新 更多