调用 `this.setState()` 会中断对 componentWillReceiveProps 中 prop 的流类型检查

2024-01-03

当我调用时,我在知道是字符串的 prop 上遇到流错误this.setState()就在它之前。如果我移动setState()在使用 prop 的行之后调用,错误就会消失。我收到的错误是:

null

此类型与预期的字符串参数类型不兼容

不明确的

此类型与预期的字符串参数类型不兼容

这两个错误都发生在同一行代码上。

这是该组件的精简版本。参见实施componentWillReceiveProps:

import React, { Component } from "react";
import apiRequest from "../../services/apiRequest";

type PropsT = {
  endpoint: ?string,
};

export default class ApiLoader extends Component {
  props: PropsT

  static defaultProps = { endpoint: null }
  state = { isFetching: true }

  componentWillReceiveProps(nextProps: PropsT) {
    if (!nextProps.endpoint) return;

    this.setState({ isFetching: true });
    this.fetch(nextProps.endpoint);       // FLOW ERROR HERE
  }

  fetch(endpoint: string) {
    apiRequest.get(endpoint)
      .then(() => this.setState({ isFetching: false }));
  }

  render(): React.Element<*> {
    return <div>Whatever.</div>;
  }
}

只需切换最后两行的顺序即可componentWillReceiveProps修复它:

this.fetch(nextProps.endpoint);      // NO ERROR!
this.setState({ isFetching: true });

这只是 Flow 中的一个错误,还是我遗漏了什么?


这是由于类型细化失效造成的:https://flow.org/en/docs/lang/refinements/#toc-refinement-invalidations https://flow.org/en/docs/lang/refinements/#toc-refinement-invalidations

拔出endpoint进入它自己的变量,你应该可以开始了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用 `this.setState()` 会中断对 componentWillReceiveProps 中 prop 的流类型检查 的相关文章

  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • 节点异步循环 - 如何使该代码按顺序运行?

    我知道有几个关于此的帖子 但根据我发现的那些帖子 这应该可以正常工作 我想在循环中发出 http 请求 并且不希望循环迭代 直到触发请求回调 我正在使用异步库 如下所示 const async require async const req
  • 如何限制 Chrome 中的最大文本区域宽度和高度或如何禁用文本区域调整大小

    Chrome 允许通过在右下角添加文本区域来调整文本区域的大小 但有时这种移动可能会破坏页面的设计 所以我想知道如何限制该操作的最大和最小宽度 即如何完全禁用该功能和thml javascript css在页面上 您可以使用 resize
  • 在 ES5 中创建自定义元素 v1,而不是 ES6

    现在 如果您严格遵循自定义元素规范 v1 https html spec whatwg org multipage custom elements html custom elements 无法在不支持类的浏览器中使用自定义元素 有没有办法
  • 在 JavaScript 中计算不包括周末和节假日的天数

    我正在尝试编写一个代码 其中将计算总天数 不包括周末和自定义假期 我通过 stackoverflow 和 adobe 论坛进行搜索以找到解决方案 并提供了以下代码 如果公共假期恰逢工作日 周六至周三 则不计算在内 我的问题是 如果公共假期落
  • 在设置后用 Javascript 替换 'var' css 属性

    我有一个元素 其上设置了 var 属性 如下所示 div class divwithbackground div CSS divwithbackground after background image var page header se
  • 无法使用 Jade 模板包含相对路径文件

    当我尝试将文件包含在同一文件夹中时 收到以下错误 the filename option is required to use include with relative paths 有两个文件 索引 jade 项目列表 jade cont
  • Jquery:排除元素

    我有以下代码 document ready function a rel each function this qtip content text img class middle src i icon processing gif alt
  • 如何将数据从 JavaScript 发送到 Python

    我正在 jinja2 和 python2 7 上使用 GAE 进行 Web 开发 我可以从Python获取数据 但我无法将数据从 JavaScript 发送到 Python 这是 JavaScript 代码 function toSave
  • 如何将 vue3-openlayers 插件添加到 nuxt

    我有以下 main ts 文件Vue3 https v3 vuejs org import createApp from vue import App from App vue How to do this in nuxt3 import
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • 单击 btn 而不触发 div 单击未按预期工作

    代码沙盒 https codesandbox io s currying breeze depdc9 file package json https codesandbox io s currying breeze depdc9 file
  • 2 个 SVG 路径的交集

    我需要检查两个 SVG Path 元素是否相交 检查边界框与 getBBox 太不准确了 我目前正在做的是迭代两条路径 getTotalLength 然后检查是否有两个点 getPointAtLength 是平等的 下面是一个片段 但正如您
  • Lodash _.hasIntersection?

    我想知道两个或多个数组是否有共同的项目 但我不在乎这些项目是什么 我知道 lodash 有一个 intersection方法 但我不需要它来遍历每个数组的每个项目 相反 我需要类似的东西 hasIntersection一旦找到第一个常见的出
  • 如何使用 ReactJS 使表中的列可以以两种方式排序

    我正在 ReactJS 中构建一个简单的应用程序 它通过调用某个 API 来使用 JSON 数组 然后我将数组的结果填充到表中 我现在想让表的列可排序 我理想的情况是同时进行升序和降序排序 一旦我单击标题 当它按升序排序时 它应该按降序排序
  • JavaScript 中的安全数据

    我必须为 Web 测试创建生成器 使用 HTML 和 JavaScript 测试必须离线和在线进行 正确答案和分数评估必须是生成的测试的一部分 最终用户的分数仅发送到服务器 无法在服务器上进行评估 并且服务器对问题一无所知 它只保存最终分数
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • gjs 如何使用 g_data_input_stream_read_line_async 在 Gnome Shell 扩展中读取套接字流

    我正在尝试编写一个 Gnome Shell 扩展 通过 Socket 服务器与 Arduino 进行通信 服务器和 Arduino 运行良好 但我陷入了监听传入服务器消息的扩展代码 因为我需要一种非阻塞方法 所以使用异步读取行 https
  • 了解客户端文件的对象 URL 以及如何释放内存

    我在用createObjectURL获取本地图像文件的引用 URL 当我完成文件 图像后 我打电话revokeObjectURL释放该内存 一切对我来说都很好 但我只是想确保我释放了我能释放的所有内存 我检查后出现了我的担忧chrome b
  • 如何向 SvelteKit/Vite 应用添加版本号?

    我正在尝试在我的 SvelteKit 应用程序中创建一个系统 它会在某个页面上向您显示有关当前应用程序版本的信息 最好是 Git 提交哈希和描述 我尝试使用Vite的定义功能 https vitejs dev config define在构

随机推荐

  • 如何创建自定义 javadoc 标签?

    如何创建自定义 javadoc 标签 例如 pre post 我找到了一些解释它的链接 但我没有运气 以下是一些链接 http www developer com java other article php 3085991 Javadoc
  • 尝试通过 iPhone 模拟器播放声音

    我正在尝试从 iPhone 程序播放声音文件 这是代码 NSString path NSBundle mainBundle pathForResource play ofType caf NSFileHandle bodyf NSFileH
  • Bigquery python SchemaField() 与结构数组

    我正在尝试通过 python 客户端在 Bigquery 创建一个表 文档使用bigquery SchemaField name TYPE 定义一个字段 虽然它似乎不起作用ARRAYS or STRUCTS 这是我试图创建的 STRUCTS
  • data.table 根据组的滞后值删除行

    我有一个data table形式如下 DT lt data table tag rep c A B each 10 value c 0 3 3 3 0 1 1 1 3 0 0 1 3 1 0 3 0 1 1 0 gt DT tag valu
  • 连接 Apache Spark DataFrame 中的列

    我们如何连接 Apache Spark DataFrame 中的两列 Spark SQL中有没有我们可以使用的函数 通过原始 SQL 您可以使用CONCAT 在Python中 df sqlContext createDataFrame fo
  • 使用其他 gradle 文件中的 Gradle 函数

    我想将 300 行 build gradle 逻辑地拆分为多个构建文件 以使其更易于维护和扩展 正如我所注意到的 可以将 gradle 任务拆分为多个文件并将它们用于 apply from myGradleFile 遗憾的是 通过这种方法
  • 等待函数中的 Ajax 调用结束,然后将对象返回给外部变量

    我想按照预期使用 JavaScript 异步 我想将收到的数据 对象分配给我需要的尽可能多的变量 DataModel01 DataModel02 DataModel03 等 我的想法是 我对 API 数据的需求一直在变化 我只想定义一次从哪
  • 无需 IP 即可访问 R Shiny 应用程序

    我开发了一个 R Shiny 应用程序并托管在本地 Intranet 服务器上 我的同事可以使用 IP Port 来访问它 不像http 192 168 135 146 5050 http 192 168 135 146 5050 但是 如
  • django local_settings导入错误

    我想导入 local settings py 文件 不在我的 VCS 系统中 以覆盖 settings py 中的数据库设置 为此 我在 settings py 文件的最后添加了这些行 try from local settings imp
  • 就地映射 NumPy 数组

    是否可以将 NumPy 数组映射到位 如果是 怎么办 Given a values 2D 数组 这是目前对我有用的代码 for row in range len a values for col in range len a values
  • 旧浏览器是否支持 HTML 5 数据属性?

    我将一些自定义数据存储在 HTML5 数据属性中以进行 Jquery 处理 自定义数据属性在旧版浏览器中可用吗 HTML5datalist属性在较旧的浏览器中不可用 尽管它可以很容易地填充 您始终可以使用标准getAttribute方法而不
  • 增加 Xcode“最近项目”列表的长度?

    我经常在 Xcode 中切换处理许多不同的项目 有些是我正在积极处理的项目 有些是我正在查找代码的旧项目 我想在 SO 答案中重用或引用 这样我的 工作集 项目的一部分最终总是从最近的项目列表中消失 我确实使用查找器选项卡来查看当前项目文件
  • Asyncjs:绕过瀑布链中的函数

    我想从瀑布函数链中跳转一个函数asyncjs in nodejs 我的代码如下所示 async waterfall function next if myBool next null else Bypass the 2nd function
  • postgresql 中多列上的多个索引与单个索引

    阅读有关该主题的一些现有帖子 我无法得出任何结论性的答案 我有过去 10 年 100 个地点的某些数据 该表约有 8 亿行 我需要主要生成每个位置的年度统计数据 有时我还需要生成每月变化统计数据和每小时变化统计数据 我想知道是否应该生成两个
  • Angular2 应用程序:当 Google 不加载页面内容时进行获取

    我正在开发基于 Angular2 的网络应用程序 我使用 Angular CLI 生成应用程序 然后为产品构建它 我在 AWS S3 和 Cloudfront 上托管了网站 当我使用网站管理员提供的 Fetch as Google 工具时
  • 测试 OSGi 包的快速简便方法

    目前 我正在开发一个新的版本控制系统 作为大学最后一年项目的一部分 我们的想法是使其具有高度适应性和可插拔性 我们使用 OSGi 框架 Equinox 实现 来管理我们的插件 我的问题是我找不到简单易用的方法来测试 OSGi 包 目前 我必
  • ILASM 未设置文件版本

    我有一个 il 文件 可以毫无问题地编译它 我可以很清楚地命名它 所以没有任何问题 但我无法按照我的预期通过属性设置文件版本 使用 ilasm 时如何设置程序集的文件版本 如果我进行往返 我总是会得到一个 res 文件 该文件仅包含不可读的
  • 在 Celery 链中使用分组结果

    我陷入了相对复杂的芹菜链配置 试图实现以下目标 假设有如下一系列任务 chain1 chain DownloadFile s http someserver file gz downloads file returns temp file
  • Angular 4 - 如何显示继承类组件的模板

    我正在尝试根据项目 组件 的类型显示项目列表 我有一系列组件 全部继承自基类 数组类型被定义为基类的类型 我想显示数组 比如说作为项目列表 每个数组都有自己的模板 而不是基本模板 我已经尝试过 在app component html中
  • 调用 `this.setState()` 会中断对 componentWillReceiveProps 中 prop 的流类型检查

    当我调用时 我在知道是字符串的 prop 上遇到流错误this setState 就在它之前 如果我移动setState 在使用 prop 的行之后调用 错误就会消失 我收到的错误是 null 此类型与预期的字符串参数类型不兼容 不明确的