django - 如何在 React 中为 material-tale 上的每一列实现自定义搜索远程数据
问题描述
我想知道是否可以在 React 中为我的材料表数据中的每一列实现自定义搜索行?
我想要一个函数,它使用在材料表中我的搜索过滤器中提交的数据调用我的 Django Rest api 的搜索函数,然后只显示匹配的数据。
基于材料表文档,我尝试实现customFilterAndSearch
并将其传递term
给自定义方法,该方法使用搜索词调用我的 Rest api,但customFilterAndSearch
多次访问该方法。实际上,我达到了一个点,即我的表中的行数会调用 axios get 方法。
这是自定义customFilterAndSearch
调用:
customFilterAndSearch: (term, rowData) => this.getDataFilterNomService(term, rowData) },
这是我使用的自定义方法:
async getDataFilterNomService(term, rowData){
console.log("TermDinFilter", term)
//console.log("rowDataDinFilter", rowData)
try{
let response = await axiosInstance.get('get/servicecatalog/filterNomService/', {
params: {
"nom_service":term
}
});
console.log("Response la Filtru NomService", response)
} catch(error){
console.log("Error: ", JSON.stringify(error, null, 4));
throw error;
}
}
这是当我尝试搜索类似“Viorel”的名称时如何调用 django
backend_1 | [11/Jun/2020 16:49:02] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:03] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:04] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:04] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:04] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:04] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:05] "GET /api/get/servicecatalog/filterNomService/?nom_service=Viorel HTTP/1.1" 200 968
backend_1 | [11/Jun/2020 16:49:05] "GET /api/get/servicecatalog/filterNomService/?
根据表中的条目数,它被调用了 18 次。
我想知道是否有一种方法可以覆盖customFilterAndSearch
......所以当用户输入提交操作时,Django Api 只会被调用一次?
或者是否有另一种实现此功能的方法?
解决方案
我看了一下博客,我认为它可以改进。(如果我错了,请纠正我,因为我是新手)。我用来解决这个问题的方法是使用过滤器标题,我认为这比为此使用固定行更好。第 1 步:将过滤设置为 true
options={{
filtering: true
}}
第 2 步:然后使用特定于列的过滤器渲染(您可以将其作为文本、选择、搜索...组件)。使用 Onchange,onBlur... 触发远程数据的 api 调用。
columns = [ {
field: 'one',
title: 'One',
filterComponent: (metaData) => {
return (
<input
type='text'
onBlur={e => {
// console metaData and use it as per your wish
}}
/>
)
}
},
{
field: 'two',
title: 'Two',
filtering: false // if you dont want to have filter for any column -add this
}]
推荐阅读
- python - 消息:没有这样的元素:无法找到元素 Selenium Python
- javascript - 如何在我的导航栏切换中停止窗口滚动到页面顶部?
- android-studio - 通过 Dokka (Kotlin) 生成文档后,如何将文档发布到 Github 页面?
- sql - BigQuery:需要在相关子查询中返回记录类型的唯一值
- c# - Xamarin.Forms 绑定仅使用默认值更新 ViewModel 属性
- google-signin - 没有 Google 会话时,Google One Tap 库无法回退到本机凭据管理器
- c - 将 EOF 与 Getchar () 函数的错误区分开来
- r - 将函数调用转换为 R 中的字符
- google-bigquery - 在 BigQuery 中使用 Where 子句进行切片
- python - ValueError: 无法解析字符串 ""60800""