当前位置: 首页 > 知识库问答 >
问题:

我可以使用道具类型来表示道具是一个promise吗?

易雅畅
2023-03-14

PropType对调试很有帮助,因为当期望未得到满足时,它们会显示警告。除此之外,它们还很好地表达了组件应该如何使用的意图。

如果我有一个组件,它接受一个可能是promise的值的prop,是否有某种方法可以使用PropType来表达?我想象的要么是像PropTypes.promise这样的直接的东西,要么是使用构建块PropType来表达“thable”概念的某种方式。

下面是一个高度简化的示例,展示了我的预期用例:

class SomeComponent extends Component {
  static propTypes = {
    someDataPromise: PropTypes.object // <-- can I be more expressive here?
  }

  state = {
    isLoading: false
  }

  async handleSubmit() {
    this.setState({ isLoading: true });

    const data = await this.props.someDataPromise;
    const response = await fetch(`/some/api/endpoint?data=${data}`);
    // do something with the response

    this.setState({ isLoading: false });
  }

  render() { /* ... */ }
}

共有3个答案

微生乐
2023-03-14

我认为你不应该这样想。React只是一个高级模板引擎,这意味着您拥有数据的“状态”和表示该状态的视图。使用promise作为属性意味着您有一个未定义的状态,这在视图组件方面很难表示。这是编程的主要问题,您可以做任何您想做的事情,但是当您使用框架时,您应该遵循框架的理念。

长话短说,不要把promise当作财产。在将属性传递给视图组件之前,请确保处于有效的确定状态。也许像redux这样的带有thunk或redux观测值的全局状态将帮助您处理异步信息。

郎言
2023-03-14

另一种表达道具promise的方式是使用PropTypes。instanceOf()。重要提示:这仅在您的promise是Promise类的实例时有效:

static propTypes = {
  someDataPromise: PropTypes.instanceOf(Promise)
}
施冠玉
2023-03-14

您可以使用具有特定形状的对象,例如。

  PropTypes.shape({
     then: PropTypes.func.isRequired,
     catch: PropTypes.func.isRequired
  })
 类似资料:
  • 我有一个组件,根据其大小接收道具。道具可以是字符串或数字,例如:或。 我能让知道这可以是PropTypes验证中的一个或另一个吗? 如果未指定类型,则会收到警告: prop type无效;它必须是一个函数,通常来自React。道具类型。

  • 情况: 我想做的事: 问题: 我只能指定一个propType?我如何允许两种不同的道具组合成一种? 谢谢

  • 我有以下组件,它主要依赖于react native的 我能够输入注释我自己的道具,但在上面的例子中抛出了一个错误 [flow]属性<代码>样式(在道具中找不到属性)常量样式:任意 我知道在typescript中,我可以将接口扩展到Image one,流程中是否有一些东西可以让我的道具以某种方式从继承所有类型?我如何从react native导入这些类型? 编辑我发现了一个叫做交叉点类型的概念,并尝

  • 本文向大家介绍react-native 道具类型,包括了react-native 道具类型的使用技巧和注意事项,需要的朋友参考一下 示例 该prop-types包允许您向组件添加运行时类型检查,以确保传递给组件的道具类型正确。例如,如果不将aname或isYummyprop传递给下面的组件,它将在开发模式下引发错误。在生产模式下,不进行道具类型检查。定义propTypes可以使您的组件更具可读性和

  • 我得到警告,因为警告:失败的道具类型:组件:道具类型是无效的;它必须是一个函数,通常来自包,但收到了 我的代码是: 我的功能运行正常,但出现此控制台错误是否有人可以帮助我解决此警告?

  • 我在react native中引入了用于搜索的Texinput。代码如下: 和: 每当我在输入文本后运行Android时,我都会看到这个警告: 警告失败属性类型为TextInput提供的“object”类型的无效属性“value”,应为“string”