我可以使用PropTypes表示道具是一个Promise吗?

问题描述 投票:0回答:2

PropTypes对于调试很有帮助,因为它们在未达到期望值时会显示警告。除此之外,它们还很好地表达了如何使用组件的意图。

[如果我有一个接受道具的组件且其值可以是一个承诺,我可以使用PropTypes用某种方式来表达它吗?我正在描绘诸如PropTypes.promise之类的直接内容,或使用构建基块PropTypes某种方式来表达“ thenable”的概念。

这里是一个高度简化的示例,显示了我的预期用例:

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() { /* ... */ }
}
reactjs react-proptypes
2个回答
3
投票

您可以使用例如对象类型

  PropTypes.objectOf({
     then: PropTypes.func.isRequired,
     catch: PropTypes.func.isRequired
  })

0
投票

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

长话短说,不要将诺言作为财产。在将属性传递给视图组件之前,请确保有效的确定性状态。也许像redux这样的全局状态具有thunk或redux observables可以帮助您处理异步信息。

© www.soinside.com 2019 - 2024. All rights reserved.