react解决checkbox全选checked的问题

来源:程序思维浏览:3718次
今天在做react后台管理系统需要批量删除功能,没想到checkbox在react里面使用还存在不少坑,接下来看看我的填坑教程吧。

react解决checkbox全选checked的问题

问题描述,先看一下代码:

constructor() {
        super()
        this.state = {
            list: [
                {id: "1", title: "新闻新闻新闻新闻新闻1", checked: false},
                {id: "2", title: "新闻新闻新闻新闻新闻2", checked: false},
                {id: "3", title: "新闻新闻新闻新闻新闻3", checked: false},
                {id: "4", title: "新闻新闻新闻新闻新闻4", checked: false}
            ]
        }
    }

render() {
      return (
      <div>
          全选 <input type="checkbox" onClick={this.allchecked.bind(this)} />
          <ul>
              {this.state.list.map((item,index)=>{
                    return(
                        <li key={index}><label><input type="checkbox"  checked={item.checked}  />{item.title}</label></li>
                    )
              })}
          </ul>
      </div>
    );
  }

获取到state里面的数据后渲染到页面,点击全选后下面的复选框有了checked=true,但是再次点击下面的复选框checked不能变为false。

原因是因为state里面的checked永远都是true,点击时不能自动改变checked的值,那么如何解决呢?

render() {
      return (
      <div>
          全选 <input type="checkbox" onClick={this.allchecked.bind(this)} />
          <ul>
              {this.state.list.map((item,index)=>{
                    return(
                        <li key={index}><label><input type="checkbox"  checked={item.checked}  onChange={(e)=>this.handleInputChange(e,index)} />{item.title}</label></li>
                    )
              })}
          </ul>
      </div>
    );
  }

只需要在下面的checkbox里面加一个onChange事件来改变state里面的checked的值就可以了handleInputChange方法里面的代码如下:

handleInputChange(event,index) {
        this.state.list[index].checked=event.target.checked;
        this.setState({list:this.state.list},()=>{
            console.log(this.state.list);
        })
    }

全选方法allchecked里面的代码:

allchecked(e){
        if(e.target.checked){
            for(let i=0;i<this.state.list.length;i++){
                this.state.list[i].checked=true;
            }
            this.setState({list:this.state.list},()=>{
                //console.log(this.state.list)
            })
        }else{
            for(let i=0;i<this.state.list.length;i++){
                this.state.list[i].checked=false;
            }
            this.setState({list:this.state.list},()=>{
                //console.log(this.state.list)
            })
        }
    }

好了这样就完美的解决了全选的问题,希望对大家有所帮助。
精品好课
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
收藏
扫一扫关注我们