網站首頁 編程語言 正文
react ant組件Select下拉框值回顯問題
情形
最近在處理react 頁面的時候遇到了一個問題:使用ant 的table組件,里面的可編輯單元格類型,但是 我的數據 有一個下拉框在表格中,因為可編輯的table 組件默認單元格是 input輸入框,所以下拉框根本就拿不到值,顯示不上。
先說一下 下拉框 在表格 column 的寫法:
{
title: '數據來源',
dataIndex: 'dataSource',
key: 'dataSource',
render: (text, record, idx) => {
return (
<Select
style={{ width: 200 }}
id="dataSource"
onChange={this.changeSource.bind(text,record,idx)}
value={record.dataSource}
>
{this.state.itemsValue.map(item => (
<Option key={item.seKey}>{item.seValue}</Option>
))}
</Select>
)
},
width: 300,
editable: false
},
主要是reade 的寫法,官方api上上這么描述的,
?render? ? ? ? ? ? Function(text, record, index) {}
生成復雜數據的渲染函數,參數分別為當前行的值,當前行數據,行索引,@return 里面可以設置表格行/列合并。
代碼中: this.state.itemsValue 是下拉框的所有數據,value? 是 下次進入頁面需要 回顯的值,為了這個回顯的值,我忙活了近倆小時。
解決得問題
第一個問題:下拉框的回顯
因為要回顯的數據 在arry<Object> 里,而且有childern 項,我先想著怎么循環拿出來,賦給value,但是均未成功,最后靈光一現。我發現了問題的所在,每條數據在table顯示的時候已經循環過了,問題就在我能不能拿到當前行的數據, 能拿到就能拿到當前改下拉框的值,翻一翻api 就什么都有了。record 就是當前的數據對象,直接點 屬性就是值。
第二個問題:
下拉框選中值后如何在 可編輯的表格上顯示:
官方的可編輯單元格的保存你輸入的數據到表格的方法是這樣的:
handleSave = row => {
const newData = [...this.state.dataSource];
const index = newData.findIndex(item => row.key === item.key);
const item = newData[index];
newData.splice(index, 1, {
...item,
...row,
});
this.setState({ dataSource: newData });
};
其中,row是你輸入數據的那行數據,newData 是表格中所有數據,數組.findIndex ( =()=>{ }) 方法是當其中匿名箭頭函數的方法返回true 的時候返回已選數據在 newData數組的下標,(如果沒找到返回的-1),
拿到對應下標后,刪除源數據newData下標的數據,然后把row加進來,也就是用已經改變的row替換之前數據的item,也就是splice ()方法的作用,
3個參數分別是index,要刪除/添加的下標,1,刪除的個數,{} 在下標位置增加的數據、
最后把修完的數據返回state,頁面重新渲染,把數據顯示在表格上。(每改一次,觸發onChange事件,渲染一次。。。)
這個方法對于輸入框 是一點問題沒有,但是下拉框就不行了,因為row對象拿不到你選得數據,input是value屬性,但是下拉框是option 標簽,所以即便你怎么選下拉框一直是空。怎么辦,勤勞的人總會有收獲,這時我想到 @wslzjr?帥帥博主對我的鼓勵:
我感覺瞬間充滿了力量,沒什么是加班解決不了的,如果有,那就班加的不夠。 我的想法是這樣的,對于下拉框,我自己拿值,自己替換數據,然后讓頁面重新渲染,不走官方的方法不就行了。于是我自己寫了一套,
changeSource =(t,e,r) =>{
//設置數據的值,用this.setState({})
let row = t;
const {
fieldName,
fieldDesc,
dataType,
fieldLength,
dataSource,
fieldValue,
required,
validRule
} = row;
row.dataSource=r;
let { rootNodesMap } = this.state;
Object.assign(rootNodesMap[row.id], row);
this.setState({ rootNodes: this.state.rootNodes });
this.updateDataSource(this.state.rootNodes);
}
其中,t 是當前的哪行數據 ,e 當前行數據,r,行索引,? assign 是對象屬性的同級拷貝方法,他無法深層次拷貝,但是我夠用了。Object.assign方法用來將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。它至少需要兩個對象作為參數,第一個參數是目標對象,后面的參數都是源對象。? 這樣表格的下拉框就有數據了。
react ant-design Select組件下拉框map不顯示
問題描述
在使用Select Option下拉組件時,map遍歷后不顯示下拉框
錯誤寫法:
{dataList && dataList.map(item =>{(
<Option key={item.id} value={item.value}>{item.value}</Option
)})}
正確寫法:
{dataList && dataList.map(item =>(
<Option key={item.id} value={item.value}>{item.value}</Option
))}
問題總結
主要是es6箭頭函數寫法的問題,當需要在嵌套中寫入HTML代碼時,箭頭函數后邊不需要加大括號{},直接用小括號()即可
在render()函數內使用大括號{}會識別成函數從而不會渲染到頁面上,小括號內的內容會識別成代碼塊正常渲染?
原文鏈接:https://blog.csdn.net/justDoItfl/article/details/103169220
相關推薦
- 2023-02-06 詳解C#如何加密解密RAR文件_C#教程
- 2022-12-05 Python實現字符串模糊匹配方式_python
- 2022-11-03 Python?pandas中apply函數簡介以及用法詳解_python
- 2022-04-14 Django執行指定腳本的幾種方法_python
- 2022-04-20 C語言進階棧幀示例詳解教程_C 語言
- 2022-09-16 Go+Kafka實現延遲消息的實現示例_Golang
- 2022-12-16 python委派生成器的具體方法_python
- 2024-03-04 layui tree組件實現搜索節點并展開
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支