美文网首页
react实现全选和反选

react实现全选和反选

作者: 瑞瑞_67ea | 来源:发表于2019-04-09 13:13 被阅读0次

class Checkboxcomponent extends React.Component{

    constructor(props){

        super(props);

        this.state = {

            chooseList : ['apple','lemon','melon','orange'],

            chooseCheck : 0,

            Allchoose : false,

            reverseCheck : false,

            isAuto : false

        }

    }

    Allchoose(e){

        if(this.state.Allchoose){

            this.setState({

                chooseCheck : 0,

                Allchoose : false,

                isAuto : false,

            })

        }else{

            this.setState({

                Allchoose : true,

                chooseCheck : this.state.chooseList.length,

                isAuto : false,

            });

        }

    }

    checkAllChoose(ItemChecked){

        if(this.state.isAuto = true)this.state.isAuto = false;

        ItemChecked ? this.state.chooseCheck++ : this.state.chooseCheck--;

        console.log(this.state.chooseCheck);

        if(this.state.chooseCheck == this.state.chooseList.length){

            this.setState({

                Allchoose : true,

                isAuto : true

            })

        }else{

            if(this.state.Allchoose == true){

                this.setState({

                    Allchoose : false,

                    isAuto : true

                });

            }

        }

    }

    Reversechoose(e){

        let newNum = this.state.chooseList.length - this.state.chooseCheck;

        if(newNum == this.state.chooseList.length){

            this.setState({

                Allchoose : true,

                isAuto : true

            })

        }else{

            this.setState({

                Allchoose : false,

                isAuto : true

            })

        }

        this.setState({

            reverseCheck : !this.state.reverseCheck,

            chooseCheck : this.state.chooseList.length - this.state.chooseCheck

        });

    }

    render(){

        return (

            <div>

                <span>全选</span>

                <input type="checkbox" value = '全选' onClick = {(e)=>{this.Allchoose(e)}} checked = {this.state.Allchoose} />

                <span>反选</span>

                <input type="checkbox" value = '反选' onClick = {(e)=>{this.Reversechoose(e)}} checked = {this.state.reverseCheck}/>

                {

                    this.state.chooseList.map((item,idx)=>{

                        return (

                            <div className = "checkbox-group" key = {idx} >

                                <span>{item} </span>

                                <CheckboxItemcomponent value = {item} checkAllChoose = {(ItemChecked)=>{this.checkAllChoose(ItemChecked)}} Allchoose = {this.state.Allchoose} Reverse = {this.state.reverseCheck} isAuto = {this.state.isAuto}/>

                            </div>

                        )

                    })

                }

            </div>

        )

    }

}

class CheckboxItemcomponent extends React.Component{

    constructor(props){

        super(props);

        this.state = {

            checked : false,

        }

    }

    _clickHandle(e){

        this.props.checkAllChoose(!this.state.checked);

        this.setState({

            checked : this.state.checked ? false : true

        });

    }

    componentWillReceiveProps(nextprops){

        console.log(nextprops.isAuto);

        if(nextprops.isAuto == false)this.state.checked = nextprops.Allchoose;

        if(nextprops.Reverse != this.props.Reverse){

            this.setState({

                checked : !this.state.checked

            })

        }

    }

    render(){

        return (

            <input type="checkbox" value = {this.props.value} checked = {this.props.Allchoose ? this.props.Allchoose : this.state.checked} onClick = {(e)=>{this._clickHandle(e)}} />

        )

    }

}

---------------------

作者:流云望风

来源:CSDN

原文:https://blog.csdn.net/u012312705/article/details/81827868

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

网友评论

      本文标题:react实现全选和反选

      本文链接:https://www.haomeiwen.com/subject/tysbiqtx.html