我可以使用 PropTypes 来表示一个 prop 是一个 Promise 吗?
Can I use PropTypes to express that a prop is a Promise?
PropTypes 有助于调试,因为它们会在未满足预期时显示警告。除此之外,它们还很好地表达了组件的使用意图。
如果我有一个组件接受一个 prop,其值可以是一个 promise,有没有什么方法可以使用 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() { /* ... */ }
}
您可以使用具有特定形状的对象,例如
PropTypes.shape({
then: PropTypes.func.isRequired,
catch: PropTypes.func.isRequired
})
我不认为那是你应该思考的方式。 React 只不过是一个高级模板引擎,这意味着您拥有 "state" 数据和表示此状态的视图。使用 promise 作为 属性 意味着你有一个未定义的状态,这在视图组件方面真的很难表示。这是编程的主要问题,你可以为所欲为,但是当你使用框架时,你应该遵循框架的哲学。
长话短说,不要像 属性 那样使用承诺。在将属性传递给视图组件之前确保有效的确定性状态。也许像 redux with thunk 或 redux observables 这样的全局状态会帮助你处理异步信息。
另一种表示 prop 是 Promise 的方法是使用 PropTypes.instanceOf()
。重要警告:这仅在您的承诺是 Promise class:
的实例时才有效
static propTypes = {
someDataPromise: PropTypes.instanceOf(Promise)
}
PropTypes 有助于调试,因为它们会在未满足预期时显示警告。除此之外,它们还很好地表达了组件的使用意图。
如果我有一个组件接受一个 prop,其值可以是一个 promise,有没有什么方法可以使用 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() { /* ... */ }
}
您可以使用具有特定形状的对象,例如
PropTypes.shape({
then: PropTypes.func.isRequired,
catch: PropTypes.func.isRequired
})
我不认为那是你应该思考的方式。 React 只不过是一个高级模板引擎,这意味着您拥有 "state" 数据和表示此状态的视图。使用 promise 作为 属性 意味着你有一个未定义的状态,这在视图组件方面真的很难表示。这是编程的主要问题,你可以为所欲为,但是当你使用框架时,你应该遵循框架的哲学。
长话短说,不要像 属性 那样使用承诺。在将属性传递给视图组件之前确保有效的确定性状态。也许像 redux with thunk 或 redux observables 这样的全局状态会帮助你处理异步信息。
另一种表示 prop 是 Promise 的方法是使用 PropTypes.instanceOf()
。重要警告:这仅在您的承诺是 Promise class:
static propTypes = {
someDataPromise: PropTypes.instanceOf(Promise)
}