有條件地禁用React Checkbox

我試圖根據計數有條件地禁用react中的復選框。通過道具傳遞值是否已檢查且大于數字。我正在保存狀態中的名稱,以便在后端數據庫中進一步處理發送到。這是我的react代碼。

class CheckboxComponent extends Component {
        constructor(props) {
            super(props);

            this.state = {
                checkedItems: {}
            };
        }

         handleChange = (event, formKey) => {
            const {checkedItems} = this.state;
            const checkedValues = {...checkedItems};
            checkedValues[event.target.name] = event.target.checked;

            this.setState((prevState, currState) => {
                return {
                    ...prevState,
                    checkedItems: checkedValues
                }
            });
            
        };

        render = () => { 
            const {checkedItems} = this.state;
            const checkedValues = {...checkedItems};
            const checkedCount = Object.values(checkedValues).length;
            const checked = Object.values(checkedValues);
            const disabled = checkedCount >= 3; 

       return (
         <div>
           {checkboxes.map((item, index) => (
                        <label className={`form__field__input__label`} key={item.key}>
                            <Input
                                type={`checkbox`} 
                                name={item.name}
                                checked={this.state.checkedItems[item.name] || false}
                                onChange={this.handleChange}
                                formKey={'subjects'}
                                disabled={(!checked[index] && checked.length > 3)}
                            />
                            {item.name}
                        </label>
                    ))}
         </div>
       )

這是我傳遞的數組,用于呈現復選框中的值

const checkboxes = [
            {
                name: "Math and economics",
                key: "mathsandeconomics",
                label: "Math and economics"
            },
            {
                name: "Science",
                key: "Science",
                label: "Science"
            },
? 最佳回答:

下面的代碼片段將很適合您。您可以將對象發送到后端,最多只能有3個屬性設置為true。從codesandbox鏈接https://codesandbox.io/s/emmeiwhite-0i8yh獲取完整代碼

import React from "react";

const checkboxes = [
  {
    name: "Math and economics",
    key: "mathsandeconomics",
    label: "Math and economics",
  },
  {
    name: "Science",
    key: "science",
    label: "Science",
  },
  {
    name: "history",
    key: "history",
    label: "history",
  },
  {
    name: "literature",
    key: "literature",
    label: "literature",
  },
];

class CheckboxComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      checkedItems: {},
      count: 0,
    };
  }

  handleChange = (event, formKey) => {
    const { name, checked } = event.target;
    const updatedCheckedItems = { ...this.state.checkedItems, [name]: checked };

    this.setState({
      checkedItems: updatedCheckedItems,
      count: Object.values(updatedCheckedItems).filter((value) => value).length,
    });
  };

  render = () => {
    const checkedValues = { ...this.state.checkedItems };
    const checkedCount = Object.values(checkedValues).filter((value) => value)
      .length;

    console.log(this.state.checkedItems);

    return (
      <div>
        {checkboxes.map((item, index) => (
          <label className={`form__field__input__label`} key={item.key}>
            <input
              type={`checkbox`}
              name={item.name}
              checked={this.state.checkedItems[item.name] || false}
              onChange={this.handleChange}
              disabled={!checkedValues[item.name] && checkedCount > 2}
            />
            {item.name}
          </label>
        ))}
      </div>
    );
  };
}

export default CheckboxComponent;

主站蜘蛛池模板: 久久国产精品无码一区二区三区 | 农村人乱弄一区二区| 日韩美女视频一区| 国产激情一区二区三区 | 99国产精品欧美一区二区三区| 国模丽丽啪啪一区二区| 国产人妖视频一区二区破除| 精品无码人妻一区二区三区18 | 岛国无码av不卡一区二区| 日韩精品国产一区| 亚洲精品色播一区二区| 欲色aV无码一区二区人妻 | 偷拍精品视频一区二区三区| 日本福利一区二区| 国产在线一区二区三区在线| 日本一区二区三区精品视频| 无码一区二区波多野结衣播放搜索 | 久久亚洲综合色一区二区三区| 亚洲片一区二区三区| 亚洲一区二区精品视频| 爆乳熟妇一区二区三区霸乳| 久久婷婷色综合一区二区| 香蕉视频一区二区| 国产亚洲一区二区三区在线| 日本大香伊一区二区三区| 精品少妇一区二区三区视频| 亚洲AV无码一区二区二三区软件| 国产精品高清一区二区三区| 久久久久人妻一区精品性色av| 精品无码人妻一区二区三区| 亚洲欧美成人一区二区三区| 丰满爆乳无码一区二区三区| 波多野结衣一区在线观看| 一区二区在线播放视频| 中文字幕乱码一区二区免费| 人妻AV中文字幕一区二区三区| 中文乱码字幕高清一区二区| 精品一区二区三区水蜜桃| av无码一区二区三区| 亚洲国产一区国产亚洲| 无码精品不卡一区二区三区|