antd中checkboxGroup包裹c(diǎn)heckbox默認(rèn)選中失效

  1. 場景描述:在React項(xiàng)目中使用Ant Design(版本:3.26.19)的Checkbox組件時,checkboxGroup包裹多個checkbox時涣觉,給單個checkbox設(shè)置checkeddefaultChecked屬性表示默認(rèn)選中時均會失效嚷节,從官方文檔中找到乌庶,可以給checkboxGroup設(shè)置defaultValue屬性選擇需要默認(rèn)選中的checkbox怔毛。defaultValue接收string[]類型,數(shù)組中的值需要與checkbox的value值保持一致促王。
  • 問題:設(shè)置defaultValue屬性后checkbox默認(rèn)選中依然未曾生效犀盟。

  • 原因:defaultValue屬性默認(rèn)值為[],初始渲染后蝇狼,之后更新的值并不會使defaultValue屬性發(fā)生變化阅畴,所以組件掛載完成后從后端請求到的數(shù)據(jù)不會作用到checkboxGroup組件上。

  • 解決:需要給CheckboxGroup設(shè)置key屬性迅耘,值與defaultValue屬性值保持一致贱枣,key值發(fā)生變化組件會重新渲染,從而使更新后的defaultValue屬性生效颤专。

  • 實(shí)現(xiàn)效果如下:


    默認(rèn)選中且不可選擇
  • 部分關(guān)鍵代碼如下:

state = {
  tableNames: [], // 表名
  defaultVals: [], // 默認(rèn)選中的值
  checkedData: [], // 選中的數(shù)據(jù)
}

// 截取部分后端返回的數(shù)據(jù)
// flag為true需要默認(rèn)選中且不可選擇
const data = [
  { value: "", name: "author_core", flag: false },
  { value: "作者錄入說明", name: "Author_remark", flag: false },
  { value: "", name: "bs_hsk_hkhbalbsheet", flag: false },
  { value: "", name: "bs_hsk_hkhincstatement", flag: true },
  { value: "", name: "bs_hsk_indicdata", flag: true },
  { value: "", name: "bs_hsk_trade", flag: true },
  { value: "", name: "bs_pc_security_main", flag: true },
  { value: "", name: "bs_sk_forecast", flag: false },
  { value: "", name: "bs_sk_forecast_config", flag: false },
  { value: "", name: "bs_sk_forecast_config_old", flag: false },
];

// 請求到數(shù)據(jù)后的處理
if (data?.length > 0) {
  const tableNames = [];
  const defaultVals = [];
  data.forEach((item) => {
    tableNames.push(item);
    if (item.flag) {
      defaultVals.push(JSON.stringify({
        table_name: item.value,
        table_ename: item.name,
      }));
    }
  });
  this.setState({ tableNames, defaultVals });
} else {
  notification.warning({
    message: '搜索結(jié)果為空',
  });
}

// 組件布局
<Checkbox.Group
  key={this.state.defaultVals}
  defaultValue={this.state.defaultVals}
  onChange={checkedData => this.setState({ checkedData })}
>
  {this.state.tableNames.map((item) => {
    const text = `${item.value} ${item.name}`;
    const checkVal = {
      table_name: item.value,
      table_ename: item.name,
    };
    return (
      <Col key={text} span={24}>
        <Checkbox
          disabled={item.flag}
          value={JSON.stringify(checkVal)}
        >
          <span title={text}>{text}</span>
        </Checkbox>
      </Col>
    );
  })}
</Checkbox.Group>
  1. 我在最開始處理的時候纽哥,當(dāng)defaultValue屬性不生效時,使用value屬性進(jìn)行設(shè)置栖秕,但由于React受控組件的特性春塌,需要對應(yīng)的onChange事件進(jìn)行響應(yīng),由此多出不少冗余代碼和處理邏輯簇捍,并不推薦只壳,僅供參考。
  • 關(guān)鍵代碼如下:
<Checkbox.Group
  value={this.state.defaultVals}
  onChange={checkedData => this.setState({ checkedData })}
>
  {this.state.tableNames.map((item) => {
    const text = `${item.value} ${item.name}`;
    const checkVal = {
      table_name: item.value,
      table_ename: item.name,
    };
    return (
      <Col key={text} span={24}>
        <Checkbox
          disabled={item.flag}
          value={JSON.stringify(checkVal)}
          onChange={({ target }) => {
            this.setState(({ defaultVals }) => {
              if (target.checked) {
                defaultVals.push(target.value);
              } else {
                defaultVals.forEach((it, i) => {
                  if (target.value === it) {
                    defaultVals.splice(i, 1);
                  }
                });
              }
              return { defaultVals };
            });
          }}
        >
          <span title={text}>{text}</span>
        </Checkbox>
      </Col>
    );
  })}
</Checkbox.Group>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暑塑,一起剝皮案震驚了整個濱河市吼句,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌事格,老刑警劉巖惕艳,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驹愚,居然都是意外死亡远搪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門么鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來终娃,“玉大人视乐,你說我怎么就攤上這事幸逆。” “怎么了晰房?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵柠新,是天一觀的道長窍荧。 經(jīng)常有香客問我,道長恨憎,這世上最難降的妖魔是什么蕊退? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮憔恳,結(jié)果婚禮上瓤荔,老公的妹妹穿的比我還像新娘。我一直安慰自己钥组,他們只是感情好输硝,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著程梦,像睡著了一般点把。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屿附,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天郎逃,我揣著相機(jī)與錄音,去河邊找鬼挺份。 笑死褒翰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匀泊。 我是一名探鬼主播影暴,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼探赫!你這毒婦竟也來了型宙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤伦吠,失蹤者是張志新(化名)和其女友劉穎妆兑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毛仪,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搁嗓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箱靴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腺逛。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衡怀,靈堂內(nèi)的尸體忽然破棺而出棍矛,到底是詐尸還是另有隱情安疗,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布够委,位于F島的核電站荐类,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茁帽。R本人自食惡果不足惜玉罐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潘拨。 院中可真熱鬧吊输,春花似錦、人聲如沸铁追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脂信。三九已至癣蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狰闪,已是汗流浹背疯搅。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埋泵,地道東北人幔欧。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像丽声,于是被迫代替她去往敵國和親礁蔗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361