欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

React antd组件多选框事件

程序员文章站 2022-07-13 23:03:03
...

按钮点击触发sendCheck()函数,代码如下:

 const [userList, setUserList] = useState(userLists);//用来对多选框选项进行更新的数组
 const [arrList, setArrList] = useState([]);//用来显示选中的项的数组

ES6语法,用来更新数组 ,userLists是设置的默认值

const sendCheck = (e,id) => {
    const newUserLists = userList.map(
      item => {
        if (item .id !== id) {
          return item ;
        } else {
          return ({ ...item , ischecked: !item .ischecked });
        }
      });
    setUserList(newUserLists);
    const lists = newUserLists.filter(item => item.ischecked);
    setArrList(lists);
  }

循环userList的每一项,如果当前数组每一项(item.id)的ID不等于(!==:比较运算符)当前选中的这一项(id),则返回给数组当前这一不等于选中这一项的元素(item.id,原来的),否则(else)给数组的每一项(…user)的ischecked(默认值是false)属性 取反(!item.ischecked)来操作选中勾选和取消勾选,然后将返回的新数组(newUserLists )存入setUserList(useState监听是否更新),然后获取更新后的新数组userList,还有一步:取消勾选时过滤掉当前取消的这一项(newUserLists.filter(item => item.ischecked);)因为不是即时更新所以直接操作newUserLists,更新显示(setArrList(lists);),获取更新后的arrList。

*e 必须的值(就算没用到,不带e可能会报错)
id 当前选中的这一个元素的唯一标识
item 当前数组循环的项

 <Checkbox
      checked={item.ischecked}
      onChange={(e) => sendCheck(e, item.id)}
      className="user-checkbox"
  />