react 实现左边列表移动到右边列表

该博客介绍了一个React项目,实现了从左边列表选择元素并移动到右边列表的功能。通过示例代码和项目链接,读者可以了解如何创建这样一个交互式的多选组件。

效果如图:

具体代码:

import React, { Component } from "react"


class Main extends Component {

    constructor(props) {
        super(props);
        this.state = {
            checkboxItems: [
                { content: "A ", checked: false },
                { content: "B ", checked: false },
                { content: "C ", checked: false },
                { content: "D ", checked: false },
                { content: "E ", checked: false },
                { content: "F ", checked: false },
                { content: "G ", checked: false },
                { content: "H ", checked: false },
                { content: "I ", checked: false },
                { content: "J ", checked: false },
                { content: "K ", checked: false },
            ],

            checkedItems: [],
        }
    }

    render() {
        return (
            <div className="light">
                <div className="main-box">
                    <ul className="left-selected">
                        {
                            this.state.checkboxItems.map((ele, index) => {
                                return (
                                    <li key={index} id={"item" + index} onClick={() => this.leftItemClick(index)} className={ele.checked ? "item active" : "item"}>
                                        <input type="checkbox" name="items" checked={ele.checked} onChange={() => this.getVal(index)} />
                                        <label>{ele.content}</label>
                                    </li>
                                )
                            })
                        }
                    </ul>

                    <div className="middle-convert">
                        <button onClick={this.leftMove}><i className="icon-arrow-right"></i></button>
                        <button onClick={this.rightMove}><i className="icon-arrow-left"></i></button>
                    </div>

                    <ul className="right-selected">
                        {
                            this.state.checkedItems.map((ele, index) => {
                                return (
                                    <li key={index} onClick={() => this.rightItemClick(index)} className={ele.checked ? "item active" : "item"} >
                                        <input type="checkbox" name="checkedItems" checked={ele.checked} onChange={() => this.getSelected(index)} />
                                        <label>{ele.content}</label>
                                    </li>
                                )
                            })
                        }
                    </ul>
                </div>
            </div>
        );
    }

    getVal = (index) => {
        let items = [...this.state.checkboxItems];
        items[index].checked = !items[index].checked;
        this.setState({
            checkboxItems: items
        })
    }

    leftItemClick = (index) => {
        let items = [...this.state.checkboxItems];
        items[index].checked = !items[index].checked;
        this.setState({
            checkboxItems: items
        })

    }

    rightItemClick = (index) => {
        let items = [...this.state.checkedItems];
        items[index].checked = !items[index].checked;
        this.setState({
            checkedItems: items
        })
    }

    getSelected = (index) => {
        let items = [...this.state.checkedItems];
        items[index].checked = !items[index].checked;
        this.setState({
            checkedItems: items
        })
    }

    leftMove = () => {
        let items = [...this.state.checkboxItems];
        let selectedItems = [...this.state.checkedItems];
        let notSelect = [];
        items.map(item => {
            if (item.checked === true) {
                item.checked = false;
                return selectedItems.push(item);
            }
            else {
                return notSelect.push(item);
            }
        })

        this.setState({
            checkedItems: selectedItems,
            checkboxItems: notSelect,
        })
    }

    rightMove = () => {
        let items = [...this.state.checkboxItems];
        let selectedItems = [...this.state.checkedItems];
        let notSelect = [];
        selectedItems.map(item => {
            if (item.checked === true) {
                item.checked = false;
                return items.push(item);
            }
            else {
                return notSelect.push(item);
            }
        })

        this.setState({
            checkedItems: notSelect,
            checkboxItems: items,
        })

    }
}

export default Main

项目地址:

https://github.com/Miever1/react-multiChoice-shift

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值