在react-admin中,如果查询字段的长度很短,如何防止发送get请求

2024-01-10

我正在使用react-admin并尝试创建一个带有自动完成字段的过滤器,该过滤器将在我键入时进行查询,并且仅当搜索条件长度长于2时才开始发送查询。

我目前正在使用shouldRenderSuggestions在我的里面AutocompleteInput字段,但这仍然发送两个在“昵称”过滤器中带有空字符串的请求,这是代码部分:

<AutocompleteInput optionText="nickname" shouldRenderSuggestions={(val) => {
        return val.trim().length > 2
      }}/>

发生的事情是当我填写第一个和第二个字母时GET请求已发送,但其中包含空字符串nickname field,

输入的字符串例如:“abc”:

第一个请求:http://website.loc/clients?filter={"nickname":""}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]

第二个请求:http://website.loc/clients?filter={"nickname":""}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]

第三个请求:http://website.loc/clients?filter={"nickname":"abc"}&page=1&perPage=25&range=[0,24]&sort=["id","DESC"]

我想完全避免发送前两个请求。

组件完整代码:

const PostPagination = props => (
  <Pagination rowsPerPageOptions={[]} {...props} />
);

const PostFilter = (props) => (
  <Filter {...props}>
    <ReferenceInput label="Client"
                    source="client_id"
                    reference="clients"
                    allowEmpty
                    filterToQuery={searchText => ({ nickname: searchText })}>
      <AutocompleteInput optionText="nickname" shouldRenderSuggestions={(val) => {
        return val.trim().length > 2
      }}/>
    </ReferenceInput>
  </Filter>
);

const PostsList = props => {
  return (
    <List {...props} perPage={15}
          pagination={<PostPagination/>}
          filters={<PostFilter/>}
          exporter={false}>
      <Datagrid>
        <TextField source="nickname" sortable={false}/>
        <DateField label="Created" source="created_at" showTime/>
      </Datagrid>
    </List>
  );
};

Edit:同样的问题也适用于“输入时搜索”字段,例如<TextInput>在 Filter>领域,我开始问一个新问题,但意识到这会有点重复,

该代码还发送从 1 个字符开始的请求,在本例中甚至没有shouldRenderSuggestions强制其发送空请求的选项

const ClientFilter = (props) => (
  <Filter {...props}>
    <TextInput label="Search" source="str" alwaysOn/>
  </Filter>
);

codesandbox.io 中的实时代码示例 https://k2r9p6r18r.codesandbox.io/#/posts/create


我也偶然发现了这个问题。到目前为止我想出的最好的方法是一个小的包装组件,可以防止ReferenceInput除非满足特定条件,否则不会触发 API 请求:

  const ConditionalFilter = (props) => {
    const { children, condition, setFilter } = props;
    const conditionalSetFilter = (val) => {
      if (setFilter && condition(val)) setFilter(val);
    };
    return React.cloneElement(children, { ...props, setFilter: conditionalSetFilter });
  };

像这样使用:

  const condition = val => val.trim().length > 2;
  return (
    <ReferenceInput 
      source="…"
      reference="…"
      shouldRenderSuggestions={condition}
    >
      <ConditionalFilter condition={condition}>
        <AutocompleteInput />
      </ConditionalFilter>
    </ReferenceInput>
  );

React-admin v3 更新:(没有包装组件,不再需要/有用)

const condition = (val) => !!val && val.trim().length > 2;
return (
  <ReferenceInput
    source="…"
    reference="…"
    filterToQuery={(val) => (condition(val) ? { name: val.trim() } : {})}
  >
    <AutocompleteInput shouldRenderSuggestions={condition} />
  </ReferenceInput>
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在react-admin中,如果查询字段的长度很短,如何防止发送get请求 的相关文章

  • 一個简洁的 antd-react-admin 应用 -- React + Antd 通用后台管理系统

    React Antd Admin 简介 React Antd Admin 一个 JavaScript 应用 项目由业界最优秀的 React 应用开发工具 create react app 初始化创建 搭配 Antd 开箱即用的高质量 Rea
  • 嵌套菜单(子菜单)

    我正在尝试实现子菜单 嵌套菜单 值得一提的是 我正在使用 Hydra 组件 并且之前没有 Redux 的经验 因为这个特定问题 几天前开始学习它 我已按照material ui 上提供的嵌套列表示例https material ui com
  • React Admin 显示非常混乱

    我的 RA 项目在本地部署时渲染良好 但是 当我将构建目录复制到 S3 存储桶进行部署时 它渲染得一团糟 有时它会起作用 但大多数时候它会呈现如下图所示 它在使用 AOR 的两种环境中都可以正常工作 环境 React admin版本 2 0
  • 在react-admin中拥有多个dataProvider的正确方法是怎样的?

    我试图在反应管理项目中使用多个数据提供程序 但出现错误 Warning Missing translation for key dataProvider is not a function function console anonymou
  • 在react-admin中访问redux store

    我的问题与反应管理 repo 我想在组件范围之外分派一个操作 以便做到这一点 我读过我需要访问实际的 redux 存储本身 并直接调度 所以我知道Admin组件有一个initialStateprop 但它只接受默认状态对象 而不接受存储 所
  • 表单提交失败后显示服务器端验证错误

    表单提交失败后如何显示验证消息 API 请求返回 HTTP 400 application problem json 响应 并包含违规行为作为带有字段路径的列表 https www rfc editor org rfc rfc7807 se
  • 嵌套参考字段

    为了检索设备类型 我使用一个将检索设备模型 然后使用另一个使用设备模型的字段 typeID 引用设备类型来检索设备类型 但它显示以下警告 警告 失败的道具类型 无效的道具翻译类型选择 提供给 ReferenceField 的布尔值 预期函数
  • React Admin:如何传递状态进行转换

    我有一个用于创建媒体的组件 它首先将媒体上传到 S3 然后将返回的值放入组件的状态中 import Create ReferenceInput SelectInput SimpleForm TextInput from react admi
  • 在 Material UI 中,如何覆盖选择器选择的组件样式?

    在 Material UI 中 延长之间的距离MuiInputLabel and MuiInput 我必须重写 marginTop 的label MuiInput formControl 然而 createMuiTheme的 overrid
  • FormContext 在本地 SimpleForm 内返回“null”

    希望有人能指出我正确的方向来尝试调试这个问题 我正在将使用react admin构建的应用程序重构为版本4 0 0 beta 3 但我的自定义表单都无法正常工作 也就是说 当我调用任何新的react hook form方法 例如 useFo
  • AUTH_LOGIN 获取完成后如何调用 AUTH_CHECK?

    我正在调用 HTTP API 以使用返回承诺的 axios 登录 AUTH LOGIN 在 API 调用完成之前 AUTH CHECK 被调用并失败 是否可以仅在 http 调用完成后触发 AUTH CHECK 请在下面找到我的 authp
  • React-Admin:我们如何从“authProvider”代码中调度存储操作?

    在异步获取中AUTH LOGIN 我们想要发送一个动作当我们从其他端点获取数据后 除了登录端点 例如我们调用另一个端点来为帐户带来数据等 我们已经准备好了一切 action reducer 使用combineReducers等 但我们不确定
  • React-admin 在创建视图提交后保留表单数据

    在反应管理中Create表单 有没有办法让用户在表单中输入的任何信息在用户单击后保留在屏幕上Save 我想重新使用他们输入的相同表单数据来创建另一条记录 Update 根据这个PR https github com marmelab rea
  • 对不是 的直接子级的输入显示选项卡表单验证

    当未聚焦的选项卡出现验证错误时 选项卡标题应显示为红色 相反 当未聚焦的选项卡出现验证错误时 选项卡标题不会给出任何错误指示 当我使用子组件时会发生此问题 如果所有组件都是在创建 编辑级别定义的 则该选项卡将按预期变为红色 但如果存在嵌套组
  • 在react-admin中自动完成带有两个字段的输入?

    我正在使用react admin创建一个网站 并使用以下代码创建一个包含id和描述的AutocompleteInput 以便您可以搜索两者并且它会过滤选项 const choices number 102 description Furni
  • react-admin 创建一个可以从菜单侧边栏访问的自定义页面

    我是反应管理新手 如何创建可以从菜单侧边栏访问的自定义页面 我正在寻找与本教程类似的内容 https marmelab com blog 2019 03 07 react admin advanced recipes user profil
  • apollo graphql 架构 React-admin 初学者

    这些技术是全新的 到目前为止我所看到的让我非常兴奋 我很难找到我所坚持的东西的例子 React admin 的文档建议我的模式说 Posts 遵循 allPosts 和 allPostsMeta allPosts 部分工作没有问题 但自然
  • 教程在 SaveContext 中抛出上下文未定义错误

    这可能是一个新手问题 但我正在使用react admin Tutorial html 当涉及到使用EditGuesser时 编辑 页面失败 报告 TypeError 上下文未定义 AFAIK 我已按照说明进行操作 在 添加创建和编辑功能 部
  • 将 Datagrid 组件与自定义查询结合使用 - react-admin

    将 Datagrid 组件与自定义查询一起使用时 收到以下错误 下面的代码适用于反应管理版本 3 3 1 但不适用于版本 3 8 1 类型错误 无法读取未定义的属性 包含 浏览器的控制台信息 列表组件必须在 内部使用 依赖 props 而不
  • 在react-admin中通过REST API进行基于cookie的身份验证

    我是反应管理新手 我已经阅读了 stackoverflow 中的所有问题 也用谷歌搜索了我的问题 但没有找到任何有用的解决方案 我正在设置 React admin 来替换我的一个项目的现有管理页面 我通过 REST API 使用基于 coo

随机推荐

  • 设置 Windows 文件安全性

    我的问题与大多数人相反 我正在用 C 本地生成文件 但是我want将它们标记为已阻止 因此 当用户在 Word 或 Excel 等应用程序中打开它们时 它会在 保护模式 下打开它们 I ve read http answers micros
  • R:向 ggplot2 中的分组直方图添加正态拟合

    我正在寻找最优雅的方法来将正态分布拟合叠加到分组直方图中ggplot2 我知道这个问题之前已经被问过很多次了 但是没有一个建议的选项 比如this one https stackoverflow com questions 7182556
  • 是什么原因导致“java.lang.InknownClassChangeError:vtable存根”?

    是什么原因导致 java lang InknownClassChangeError vtable存根 在我们的应用程序中 我们很少看到此错误随机弹出 到目前为止只出现两次 而且我们运行了很多次 即使重新启动应用程序 使用相同的 jvm ja
  • Flask 将变量从一个函数传递到另一个函数

    正如你所看到的代码 我想传递变量q从函数home 进入功能search app route methods GET POST def home result Mylist query all return render template i
  • DIM 在 Visual Basic 和 BASIC 中代表什么?

    什么是Dim在 Visual Basic 中代表什么 Dim 最初 在 BASIC 中 代表 Dimension 因为它用于定义数组的维度 BASIC 的最初实现是达特茅斯基础 https en wikipedia org wiki Dar
  • AWS CLI 2 无法使用 CLI 更新服务

    我在 ecs 上有一个集群 一切正常 当我使用 aws cli v 1 时 我可以使用如下命令更新我的服务aws ecs update service cluster cluster name service service name ta
  • 执行 io 时 akka jvm 线程与 os 线程

    我在该网站上进行了一些搜索 以寻求帮助理解这一点 但没有找到任何非常清晰的内容 所以我想我应该发布我的用例 看看是否有人可以提供一些线索 我有一个关于在 akka 中用于 io 操作时 jvm 线程与操作系统线程的扩展的问题 来自 akka
  • 适用于英语以外语言的 POS [重复]

    这个问题在这里已经有答案了 我对 nltk 很陌生 这使我可以根据句子的词性来标记句子 但是对于其他语言执行此操作涉及哪些步骤 import nltk sentence I m not sure tokens nltk word token
  • 在私有 github 文件夹中获取 R 文件

    我希望在私人 github 文件夹中获取一些 R 脚本 并通过 R 使其在某些环境中可用 当使用公共 github 文件夹时 这两个命令都可以完成这项工作 get URL 和 source url 来自 devtools 然而 当文件夹是私
  • NSTimer改变图像iPhone编程

    如何在iPhone编程中使用NSTimer定期更改图像 我创建一个用于加载图像的图像视图 我想在 imageview 中显示图像并使用 NSTimer 定期更改图像 我不使用 NSTimer 而是使用一组图像并对它们进行动画处理 查看文档从
  • 在cordova android项目中定义有关buildType的包名称

    如何定义关于我的 buildType 的正确包名称 我有这个命令行来构建 cordova run android device buildType beta 我有这个钩子 在准备之后 它从命令行设置 buildType fs appendF
  • 网格图的常见图例[重复]

    这个问题在这里已经有答案了 在这个可重现的示例网格图中 3 个图有 3 种填充颜色 z 显示为蓝色 col 但在第四个图中只有 1 个 col 因此 z 显示为红色 我只想展示一个常见的传说 我可以做到 但我希望 z 在所有四个图中都是蓝色
  • 如何在网站登录完成之前隐藏 WebView? [本机反应]

    我正在尝试制作一个显示网站的组件WebView然后自动填写用户信息进行登录 我通过向其中注入一些 javascript 来处理自动填充部分WebView与injectedJavascipt prop 但问题是我想隐藏WebView 登录页面
  • 在 Haskell 中实现 Iota

    Iota 是一种小得可笑的 编程语言 仅使用一个组合器 我有兴趣了解它是如何工作的 但是以我熟悉的语言查看其实现会很有帮助 我找到了一个用Scheme编写的Iota编程语言的实现 不过 我在将其翻译成 Haskell 时遇到了一些麻烦 它相
  • 错误:onActivityResult 不覆盖任何内容

    我正在用 Kotlin 为 Android 编写一个语音识别应用程序 class MainActivity AppCompatActivity public override fun onCreate savedInstanceState
  • 如何在 Android 7+ 上阻止“按住后退按钮”退出“锁定任务模式”

    我正在尝试使用 锁定任务模式 如上所述https developer android com work cosu html https developer android com work cosu html 我的目标是让单个应用程序在 信
  • Google Script GetRange 与基于列中的值的过滤器并仅选择某些列

    我有一个 35 列和 300 行的数据集 我想要获取仅包含第 30 列 名称 中某些值的行的范围 要过滤数据的名称基于活动报告表中的报告文件单元格 B6 到目前为止我尝试过这个 var report SpreadsheetApp getAc
  • 如何捕获抽屉的打开和关闭抖动?

    如何捕捉抽屉打开和关闭的颤动 原则上 必须使用两个对象来实现此目的 保存 抽屉的 DrawerController 和抽屉回调 抽屉回调应该跟踪抽屉的打开和关闭 但是讨论的代码https github com flutter flutter
  • iOS 中 UITextField 中的密码验证

    我有 1UITextfield我的 iPhone 应用程序中的密码 我想通过以下验证来验证此文本字段 必须至少 10 个字符 必须至少包含 1 个小写字母 1 个大写字母 1 个数字和 1 个特殊字符 有效的特殊字符是 10 d a z A
  • 在react-admin中,如果查询字段的长度很短,如何防止发送get请求

    我正在使用react admin并尝试创建一个带有自动完成字段的过滤器 该过滤器将在我键入时进行查询 并且仅当搜索条件长度长于2时才开始发送查询 我目前正在使用shouldRenderSuggestions在我的里面Autocomplete