欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React關(guān)于antd table中select的設(shè)值更新問題

 更新時間:2024年03月22日 09:56:07   作者:jwensh  
這篇文章主要介紹了React關(guān)于antd table中select的設(shè)值更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

問題 1. 默認(rèn)值問題(沒有顯示placeholer)

描述:

正常情況下,表格一列下不同行,可能有不同值,這些值設(shè)值到 select 希望展示不同的樣式;

如空值(0;’’),應(yīng)該顯示 placeholder

<Select
  showSearch
  suffixIcon={<SearchOutlined />}
  style={{ width: 150 }}
  placeholder="請選擇設(shè)置項"
>
...
</Select>

上面的寫法會顯示 placeholder 內(nèi)容,但是沒有進(jìn)行設(shè)值操作

// react + typescript
render : (text: React.ReactNode, record: TaskListType) => (
    <Select
      showSearch
      value={text as string}
      suffixIcon={<SearchOutlined />}
      style={{ width: 150 }}
      placeholder="請選擇設(shè)置項"
    >
    ...
    </Select>
)
  • 上面 text 是 antd table column 傳過來的值,且值是空值
  • 結(jié)果:還是不能展示 placeholder
  • 這里直接說結(jié)論吧,不吃丸子了

select 的 value、defaultValue、key

defaultValue 和 value 區(qū)別 ?

defautValue 指定默認(rèn)值,也就是我們頁面加載時,通過 dataSource 設(shè)置進(jìn)來的數(shù)據(jù);

value 指定當(dāng)前選中值,通過下拉列表 option 選中后的值;

問題:使用defaultValue會有一個問題,對頁面進(jìn)行數(shù)據(jù)處理后數(shù)據(jù)沒有及時更新,需要用 value 解決此問題

解決:空值展示 placeholder ,需要設(shè)置為 undefined

// react + typescript
render : (text: React.ReactNode, record: TaskListType) => (
    <Select
      showSearch
      value={record.setting === '' ? undefined : record.setting}
      suffixIcon={<SearchOutlined />}
      style={{ width: 150 }}
      placeholder="請選擇設(shè)置項"
    >
    ...
    </Select>
)

官網(wǎng)看到:

export type SelectValue = RawValue | RawValue[] | LabeledValue | LabeledValue[] | undefined;

也實驗過 null ts eslint 直接提示不行,所以,想要了解其深度原理,可看源碼

問題2. 更新一行數(shù)據(jù)后,select 的 selectValue 狀態(tài)沒有變化

更新 select 的值有兩個渠道

  • 1.通過下拉框選擇 option
  • 2.其他事件更新了當(dāng)前行數(shù)據(jù)(如: setting=‘user’ => setting=’’)

第二個方案應(yīng)該是我們經(jīng)常用的,如下寫法是不生效的

render : (text: React.ReactNode, record: TaskListType) => (
    <Select
      showSearch
      value={record.setting === '' ? undefined : record.setting}
      suffixIcon={<SearchOutlined />}
      style={{ width: 150 }}
      placeholder="請選擇設(shè)置項"
    >
    ...
    </Select>
)


// 更新操作是 Hooks 函數(shù)直接 setTaskList([...dataSource])

不管使用 value 還是 defaultValue 都不生效;

解決:為 select 添加一個 key 的 props

實現(xiàn)非受控組件(用defaultValue),兩個辦法

  • 第一個服務(wù)端沒有返回數(shù)據(jù)的時候,不 render Select,render 一個占位的 placeholder;
  • 給 Select 加一個 key,值為 defaultValue;
render : (text: React.ReactNode, record: TaskListType) => (
    <Select
      showSearch
      value={record.setting === '' ? undefined : record.setting}
      key={record.setting}
      suffixIcon={<SearchOutlined />}
      style={{ width: 150 }}
      placeholder="請選擇設(shè)置項"
    >
    ...
    </Select>
)

問題3. antd table 局部一行數(shù)據(jù)更新

// 某一行數(shù)據(jù)更新調(diào)用的方法
const handleSave = (row: TaskListType) => {
    // 從新將數(shù)據(jù) copy 一波
    const newData = [...dataSource];
    // 找到操作更新的數(shù)據(jù)在源數(shù)據(jù)中的下標(biāo)
    const index = newData.findIndex(item => row.key === item.key);
    // 找到對應(yīng)更新的數(shù)據(jù)
    const item = newData[index];
    // 將新數(shù)據(jù)中的數(shù)據(jù)進(jìn)行更新
    newData.splice(index, 1, {
      ...item,
      ...row,
    });
    // useState 更新即可
    setTaskList(newData);
  };

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 使用react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題

    使用react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題

    一般我們在寫react項目中,同時渲染很多dom節(jié)點,會造成頁面卡頓, 空白的情況。為了解決這個問題,今天小編給大家分享一篇教程關(guān)于react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • ReactNative短信驗證碼倒計時控件的實現(xiàn)代碼

    ReactNative短信驗證碼倒計時控件的實現(xiàn)代碼

    本篇文章主要介紹了ReactNative短信驗證碼倒計時控件的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • React-Route6實現(xiàn)keep-alive效果

    React-Route6實現(xiàn)keep-alive效果

    本文主要介紹了React-Route6實現(xiàn)keep-alive效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • react?hooks?計數(shù)器實現(xiàn)代碼

    react?hooks?計數(shù)器實現(xiàn)代碼

    這篇文章主要介紹了react?hooks計數(shù)器實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 淺談使用React.setState需要注意的三點

    淺談使用React.setState需要注意的三點

    本篇文章主要介紹了淺談使用React.setState需要注意的三點,提出了三點對 React 新手來說是很容易忽略的地方,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • React?split實現(xiàn)分割字符串的使用示例

    React?split實現(xiàn)分割字符串的使用示例

    當(dāng)我們需要將一個字符串按照指定的分隔符進(jìn)行分割成數(shù)組時,我們可以在組件的生命周期方法中使用split方法來實現(xiàn)這個功能,本文就來介紹一下,感興趣的可以了解下
    2023-10-10
  • React Form組件的實現(xiàn)封裝雜談

    React Form組件的實現(xiàn)封裝雜談

    這篇文章主要介紹了React Form組件的實現(xiàn)封裝雜談,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • ES6 class類鏈?zhǔn)嚼^承,實例化及react super(props)原理詳解

    ES6 class類鏈?zhǔn)嚼^承,實例化及react super(props)原理詳解

    這篇文章主要介紹了ES6 class類鏈?zhǔn)嚼^承,實例化及react super(props)原理,結(jié)合實例形式詳細(xì)分析了ES6 中class類鏈?zhǔn)嚼^承,實例化及react super(props)原理相關(guān)概念、原理、定義與使用技巧,需要的朋友可以參考下
    2020-02-02
  • React實現(xiàn)antdM的級聯(lián)菜單實例

    React實現(xiàn)antdM的級聯(lián)菜單實例

    這篇文章主要為大家介紹了React實現(xiàn)antdM的級聯(lián)菜單實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 解決React報錯The?tag?is?unrecognized?in?this?browser

    解決React報錯The?tag?is?unrecognized?in?this?browser

    這篇文章主要為大家介紹了解決React報錯The?tag?is?unrecognized?in?this?browser示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論