问题描述
我知道这个问题似乎有些奇怪,但是我正在尝试实现一个框架加载器。为此,我想向我的组件发送一个诸如“ loading = {true}”之类的道具,以告诉他们忽略其他参数,因为他们不需要它(它们只需要显示它们正在加载,而不是显示任何有意义的东西)
我想到了一些解决方法:
- 我可以声明非必需的原型,而只需声明一个默认值...但是在加载步骤之外,我不会有任何警告
- 只需提供一些巨型道具作为强制性道具,但这是很多无用的代码
- 复制每个组件-“标准组件”和“加载组件”,但是我有一些罕见的特殊情况,其中一个元素决定了它们在javascript中显示多少个元素-基于用户视口也必须复制-将加载器的文件容量增加一倍。
最后一个想法似乎是最有前途的,因为它也可以防止在附加条件下妨碍组件的运行,但是我仍然想研究让组件管理自己的渲染的想法。
那么,有没有办法告诉Proptypes:“嘿,我知道您没有所有必需的道具,但是一次却不信任我?”
非常感谢!
解决方法
您可以使用可选形状。
看起来可能像这样; (考虑为伪代码)
import React from 'react';
import PropTypes from 'prop-types';
import MyComponent from 'somewhere';
const Example = ({ loading,options }) => (
loading ? <div>Loading...</div> : <MyComponent {...options} />
);
Example.propTypes = {
loading: PropTypes.bool.isRequired,options: PropTypes.oneOfType([null,PropTypes.shape({
prop1: PropTypes.bool.isRequired,})]),}
Example.defaultProps = {
options: null,}
export default Example;