PropTypes形状被标记为必需

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PropTypes形状被标记为必需相关的知识,希望对你有一定的参考价值。

所以我试图为我的组件对象添加一个形状。对象从服务器加载,因此从一开始就不存在。但是当我将形状添加到Proptypes时。它不断抛出标记为必需的错误,但事实并非如此。

shapeobjectOf会自动添加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`.

确实在开头是未定义的,但是我不希望它被要求

答案

默认情况下,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,如果你想要使用形状的节目不会使对象成为必需(尽管最后使用.isRequired会产生警告)。

值得注意的一件事是你的错误信息看起来有点奇怪。通常错误消息如下所示:

"Warning: Failed prop type: The prop `foo` is marked as required in `App`, but its value is `undefined`.
in App"

支柱显示为foo而不是foo.isRequired。你似乎在说

prop `topicsObject.isRequired` 

所以它可能会影响导入/导出形状的方式。

以上是关于PropTypes形状被标记为必需的主要内容,如果未能解决你的问题,请参考以下文章

更新子记录 EF Core 3.0 中的错误实体之间的关联已被切断,但关系被标记为“必需”

警告:失败的道具类型:道具`children`在`Query`中被标记为必需,但它的值是`undefined`

在片段中创建自定义列表视图时出错。必需的活动,找到的片段

应用程序启动器 “sublime_text.desktop“ 还没有被标记为 信任。如果您不知道这个文件的来源,那么启动它可能会不安全。解决sublime在ubuntu中不支持中文输入问题。(代码片段

带有标记的Android谷歌地图片段

在android活动中设置片段的形状和透明度