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="請(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)警解除方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
解決react-connect中使用forwardRef遇到的問題
這篇文章主要介紹了解決react-connect中使用forwardRef遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
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的核心概念其實(shí)很簡(jiǎn)單:將需要修改的state都存入到store里,發(fā)起一個(gè)action用來描述發(fā)生了什么,用reducers描述action如何改變state tree,這篇文章主要介紹了Redux thunk中間件及執(zhí)行原理分析2022-09-09
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)緩存的示例代碼,文中通過示例代碼介紹的非常詳細(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è)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
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熱加載局部更新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

