PropTypes:初始useState返回对象,并在添加第一个项目时未通过propTypes检查

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

我不确定这是预期的行为,多少是用户错误;

我将dictionary状态初始化为空数组。

const [dictionary, setDictionary] = useState([]);

控制台记录dictionary向我返回一个空数组[],而typeof dictionary向我返回一个对象(为什么?)。

 > []
     length: 0
     __proto__: Array(0)

 > object

该数组最终通过用户输入以形状传播

[
  {
    word: 'test',
    definition: 'test'
  }
]

我使用React的propTypes,并像这样检查完整性:

Core.propTypes = {
  dictionary: PropTypes.arrayOf(
    PropTypes.objectOf(
      PropTypes.shape({
        definition: PropTypes.string,
        word: PropTypes.string.isRequired
      })
    )
  )
};

在初始渲染时,我没有收到任何错误,但是当将第一项添加到数组时,控制台会告诉我:

Warning: Failed prop type: Invalid prop `dictionary[0].word` of type `string` supplied 
to `Core`, expected `object`.

[将PropType检查更改为]时>

WordRandom.propTypes = {
  dictionary: PropTypes.arrayOf(
    PropTypes.objectOf(
      PropTypes.string.isRequired
    )
  )
};

添加第一项不会引起警告。我是否不应该/不允许检查对象中的每个项目?

没有后续添加到数组中会触发错误,所以我想知道我是否弄虚作假,或者它的预期行为无关紧要?

编辑:为澄清:

setDictionary([...dictionary, { word, definition }]);

其中单词和定义是字符串

我不确定这是预期的行为,多少是用户错误;我将字典状态初始化为一个空数组。 const [dictionary,setDictionary] = useState([]);控制台...

arrays reactjs object typechecking react-proptypes
2个回答
0
投票

所以您似乎想删除proptypes.objectOfobjectOf(shape())将期望有一个对象对象。


0
投票

仅使用形状

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