代码之家  ›  专栏  ›  技术社区  ›  IntelligentCancer

处理复选框验证并从react中的复选框创建父/子对象

  •  0
  • IntelligentCancer  · 技术社区  · 4 年前

    我是react的初学者,刚开始做,我被卡住了。我试图实现的是创建一个树视图(尝试过的树视图可用,但它们对我来说太复杂了)。我自己用下面的对象创建了它。

    const [state, setState] = useState({
            Filters: [
                {
                    value : "Training 1",
                    name: "Training 1",
                    options: [
                        {
                            value: "Module 1",
                            name: "Module 1"
                        },
                        {
                            value: "Module 2",
                            name: "Module 2"
                        }
                    ]
                },
                {
                    value: "Training 2",
                    name: "Training 2",
                    options: [
                        {
                            value: "Module 3",
                            name: "Module 3"
                        }
                    ]
                },
                {
                    value: "Training 3",
                    name: "Training 3",
                    options: [
                        {
                            value: "Module 4",
                            name: "Module 4"
                        },
                        {
                            value: "Module 5",
                            name: "Module 5"
                        }
                    ]
                }
            ],
            selected: []
        });
    

    下面是我的复选框处理程序

    const handleCheckboxChange = (value) => {
            setState((state) => {
                const updatedEtables = state.selected.find(
                    (obj) => obj === value
                );
                const selected = updatedEtables
                    ? state.selected.filter(
                        (obj) => obj !== value
                    )
                    : [...state.selected, value];
                return {
                    selected,
                    Filters: [
                        ...state.Filters.map((filter) => {
                            return {
                                ...filter,
                                options: filter.options.map((ele) => {
                                    return {
                                        ...ele,
                                        checked: selected.includes(ele.value)
                                    };
                                })
                            };
                        })
                    ]
                };
            });
        };
    

    下面是我的用户界面

    <div>
                            {state.Filters.map((ele) => {
                                return (
                                    <React.Fragment>
                                        <h6>{ele.name}</h6>
                                        {ele.options.map((item) => {
                                            return (
                                                <div>
                                                    <RiIcons.RiArrowRightSLine />
                                                    <input
                                                        checked={item.checked || false}
                                                        onChange={() => handleCheckboxChange(item.value)}
                                                        type="checkbox"
                                                    />
                                                    <label>{item.name}</label>
                                                </div>
                                            );
                                        })}
                                    </React.Fragment>
                                );
                            })}
    
                            <strong>Selected: </strong>
                            <br />
                            <span>{state.selected.join(",")}</span>
                        </div>
    

    我能够创建树状视图,并获得选中复选框的选定值。现在我想要的是两件事。

    1. 如果用户从不同的培训中选择了两个模块(即,如果用户选择模块1,然后选择模块3),要突出显示或显示错误消息,我想突出显示第二个选择,并显示一个错误,表示一次只能选择一个培训中的模块。
    2. 我目前正在显示选定的模块,我想创建一个对象,该对象将显示选定的培训和模块,如有人选择模块1和模块2,我想要一个对象,如

    [{ 价值:“训练1”, 名称:“培训1”, 选项:[ { 值:“模块1”, 名称:“模块1” }, { 值:“模块2”, 名称:“模块2” } ] }]

    如果有人能帮我,我将不胜感激。我知道这对专家们来说不是什么大事,但对我来说有点关键,因为我今天必须完成这项工作:/

    0 回复  |  直到 4 年前