最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

描述:

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

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

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

上面的寫法會(huì)顯示 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="請(qǐng)選擇設(shè)置項(xiàng)"
    >
    ...
    </Select>
)
  • 上面 text 是 antd table column 傳過來的值,且值是空值
  • 結(jié)果:還是不能展示 placeholder
  • 這里直接說結(jié)論吧,不吃丸子了

select 的 value、defaultValue、key

defaultValue 和 value 區(qū)別 ?

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

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

問題:使用defaultValue會(huì)有一個(gè)問題,對(duì)頁面進(jìn)行數(shù)據(jù)處理后數(shù)據(jù)沒有及時(shí)更新,需要用 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="請(qǐng)選擇設(shè)置項(xiàng)"
    >
    ...
    </Select>
)

官網(wǎng)看到:

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

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

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

更新 select 的值有兩個(gè)渠道

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

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

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


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

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

解決:為 select 添加一個(gè) key 的 props

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

  • 第一個(gè)服務(wù)端沒有返回?cái)?shù)據(jù)的時(shí)候,不 render Select,render 一個(gè)占位的 placeholder;
  • 給 Select 加一個(gè) 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="請(qǐng)選擇設(shè)置項(xiàng)"
    >
    ...
    </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);
    // 找到對(duì)應(yīng)更新的數(shù)據(jù)
    const item = newData[index];
    // 將新數(shù)據(jù)中的數(shù)據(jù)進(jìn)行更新
    newData.splice(index, 1, {
      ...item,
      ...row,
    });
    // useState 更新即可
    setTaskList(newData);
  };

總結(jié)

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

相關(guān)文章

  • 新建的React Native就遇到vscode報(bào)警解除方法

    新建的React Native就遇到vscode報(bào)警解除方法

    這篇文章主要為大家介紹了新建的React Native就遇到vscode報(bào)警解除方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 解決react-connect中使用forwardRef遇到的問題

    解決react-connect中使用forwardRef遇到的問題

    這篇文章主要介紹了解決react-connect中使用forwardRef遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • React中不適當(dāng)?shù)腍ooks使用問題及解決方案

    React中不適當(dāng)?shù)腍ooks使用問題及解決方案

    在 React 開發(fā)中,Hooks 提供了一種強(qiáng)大的方式來管理組件的狀態(tài)和生命周期,然而,不恰當(dāng)?shù)?nbsp;Hooks 使用可能會(huì)導(dǎo)致組件行為異常、性能問題或難以調(diào)試的錯(cuò)誤,本文將探討 React 中常見的不適當(dāng) Hooks 使用問題,并提供解決方案,需要的朋友可以參考下
    2025-03-03
  • Redux thunk中間件及執(zhí)行原理詳細(xì)分析

    Redux thunk中間件及執(zhí)行原理詳細(xì)分析

    redux的核心概念其實(shí)很簡(jiǎn)單:將需要修改的state都存入到store里,發(fā)起一個(gè)action用來描述發(fā)生了什么,用reducers描述action如何改變state tree,這篇文章主要介紹了Redux thunk中間件及執(zhí)行原理分析
    2022-09-09
  • React 父子組件通信的實(shí)現(xiàn)方法

    React 父子組件通信的實(shí)現(xiàn)方法

    這篇文章主要介紹了React 父子組件通信的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析

    react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析

    這篇文章主要介紹了react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • react實(shí)現(xiàn)組件狀態(tài)緩存的示例代碼

    react實(shí)現(xiàn)組件狀態(tài)緩存的示例代碼

    本文主要介紹了react實(shí)現(xiàn)組件狀態(tài)緩存的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試

    React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試

    這篇文章主要介紹了React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React調(diào)度系統(tǒng)Scheduler工作原理詳解

    React調(diào)度系統(tǒng)Scheduler工作原理詳解

    這篇文章主要為大家介紹了React調(diào)度系統(tǒng)Scheduler工作原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 使用webpack配置react-hot-loader熱加載局部更新

    使用webpack配置react-hot-loader熱加載局部更新

    這篇文章主要介紹了使用webpack配置react-hot-loader熱加載局部更新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論

眉山市| 全椒县| 靖西县| 天津市| 丰顺县| 南雄市| 行唐县| 明光市| 瑞金市| 寿宁县| 桂林市| 孟村| 秭归县| 嘉善县| 绿春县| 裕民县| 乐陵市| 桃园县| 太仆寺旗| 博爱县| 盐亭县| 阜宁县| 邮箱| 清水县| 康乐县| 河曲县| 承德县| 彭阳县| 昭苏县| 兴国县| 弥勒县| 沛县| 拉孜县| 盐边县| 哈尔滨市| 扎囊县| 吴江市| 石棉县| 朝阳县| 德昌县| 秦皇岛市|