antd的CheckBox

Posted webchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了antd的CheckBox相关的知识,希望对你有一定的参考价值。

前言0:首先安装immutable.js:npm install --save-g-dev immutable

前言1:为方便还原问题,代码能简写就简写。

问题:简洁版如图: 图1显示的是测试1的勾,但点击c、d,勾是打不上的,测试2依然,原因是view没有刷新

解决方法: 方法1:在每次点击勾时,触发checkbox的onChange,在该方法内,设置time,令view强制刷新:

 
   
   
 
  1. this.setState({

  2.      defaultRowCheck:newArr,

  3.      time:new Date()})

第二种方法:将check转换为Immutable对象也可以解决

 
   
   
 
  1. checkChange(item,e){

  2.  let {defaultRowCheck}=this.state

  3. //newArr已经是Immutable对象(使用fromJS()转化的)  

  4. let newArr=defaultRowCheck

  5.  let index=+(item.index)

  6.  let value=item.value

  7. //list是index和value,map是key和value

  8.    if(newArr.includes(value)){

  9. //不能单单newArr.set(index,''),这样newArr没有赋新值

  10. newArr=newArr.set(index,'')

  11. //最后一定要更新状态

  12.      this.setState({defaultRowCheck:newArr})

  13.    }else{

  14.      newArr=newArr.set(index,item.value)

  15.      this.setState({defaultRowCheck:newArr})

  16.    }

  17. }

 
   
   
 
  1. //incluedes(value),判断是否有该值

  2. checked={defaultRowCheck.includes(item.value)}

繁琐版问题: 1.用checkbox的defaultChecked时,只能读取第一个渲染的勾,当点击第二个测试时,不能重新渲染,打钩,但可以点击修改勾 2.用checkbox的checked时,能动态更新不同item的勾,但点击无法消勾,但是单独用checked={str===“aaa”},并在onChange中setState({str:xxx})是可以改变的,反而,我无论是用数组(起初是想用数组保存测试的所有功能)checked={arr.indexOf(str)>-1},来判断,还是checked={arr[i]===str},鼠标点击都没有用

结语:这是困扰我两天的问题,被同事姐姐一句话解决了(;′⌒`),即上面的两种解决方法。

就不还原问题代码了,好费时间。

(完)


以上是关于antd的CheckBox的主要内容,如果未能解决你的问题,请参考以下文章

关于antd 中使用Form.Item 结合CheckBox 无法更新改变状态的问题

antd-design-vue checkbox-group 自定义选项内容

如何判断checkbox复选框是否选中

react 使用antd的多选功能做一个单选与全选效果

2019-05-10 antd-design-vue 组件文档

使用react中antd design UI库from中的getFieldsValue,getFieldValue,validateFields,resetFields,getFieldDecorat