所以我正在尝试向我的组件对象添加一个形状。该对象是从服务器加载的,因此从一开始就不存在。但是当我将形状添加到 Proptypes 时。它不断抛出错误,指出它被标记为必需,但事实并非如此。
shape
或 objectOf
是否自动添加 isRequired
值?
TopicsList.propTypes = {
topicsObject: PropTypes.shape(reportsTopicsObjectResultShape),
};
还有形状:
export const reportsTopicObject = PropTypes.shape({
avg_rating_ord: PropTypes.number,
cards_with_comments: PropTypes.number,
cards_without_comments: PropTypes.number,
number_of_questions: PropTypes.number,
rating_count: PropTypes.number,
scale_version_id: PropTypes.string,
scale_id: PropTypes.string,
last_answered_at: PropTypes.string,
id: PropTypes.string,
type: PropTypes.string,
name: PropTypes.shape(translatedObjectSystem),
description: PropTypes.shape(translatedObjectSystem)
});
export const reportsTopicsObjectResultShape = PropTypes.shape({
topics_distribution: PropTypes.shape({
general: PropTypes.number,
groups: PropTypes.number,
people: PropTypes.number
}),
topic_list: PropTypes.objectOf(reportsTopicObject)
});
我仍然得到错误:
Failed prop type: The prop `topicsObject.isRequired` is marked as
required in `TopicsList`, but its value is `undefined`.
确实在开头是 undefined
这没关系,但我不希望它是必需的。
最佳答案
默认情况下,shape 和 objectOf 都不会导致 prop 成为必需的。这是直接来自 react docs 的示例:
// An object with property values of a certain type
optionalObjectOf: PropTypes.objectOf(PropTypes.number),
// An object taking on a particular shape
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
这是 an example如果您希望使用 shape 的显示不会使对象成为必需的(尽管最后使用 .isRequired 会产生警告),您可以尝试一下。
值得注意的一件事是您的错误消息看起来有点奇怪。通常错误消息如下所示:
"Warning: Failed prop type: The prop `foo` is marked as required in `App`, but its value is `undefined`.
in App"
prop 显示为 foo
而不是 foo.isRequired
。你的似乎在说
prop `topicsObject.isRequired`
所以它可能与形状导入/导出的方式有关。
关于javascript - PropTypes 形状被标记为需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071941/