版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
整体思路
我们需要点击一个多选框,从而实现全选对应的所有的复选框,但是又不得影响想要单个选中的操作,为什么会有这个但是下面会说明。
Checkbox API
首先我们先搞清楚defaultChecked与checked的区别:
defaultChecked是初始是否选中,也就是只会在初始渲染的时候作用一次,后边对它进行的操作将不会直接展现在样式上,因此它不是我们所需要的。
checked制定当前是否选中,也就是对他的操作可立马展现在样式上,它才是我们真正需要的。
搞清楚我们所需要的就简单的多了。
首先我们先实现全选,看代码:
...this.whether(e)}> "全选"whether(e) { this.setState({ status:e.target.checked }); }
这里的status就是来管控所有的所有的CheckboxItem状态,我们只有在点击全选时去改变这个状态就可以实现对所有的checkbox的选择,但是如果仅仅这样就会造成我们想点击单个时候无法实现,因为我们仅仅有一个状态是管控,所以要想两个同时实现就必须有两个状态去实现管控。代码如下:
this.onChange(e)}>this.onChange(e)}>...this.whether(e)}> "全选"whether(e) { this.setState({ status:e.target.checked }); }
只有在我们想要逐个点击的时候调用onchange方法改变被点击的这个thisSatus值就行了。多余代码不再赘述,俗话说授人以鱼,不如授人以渔。
如果你的checkbox是循环出来的没有这个状态那么你可以在获取数据的时候,自己添加一个字段来作为当前是否选中的标示,或者拜托服务端的同学。
可能文章的中的代码有不规范的地方,但是旨在告诉大家如何实现的思路,有任何错误欢迎指出,立马改正。自己也会把工作中遇到的坑或者新想法分享出来,大家共同进步,共同成长