我不确定这是预期的行为,多少是用户错误;
我将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([]);控制台...
所以您似乎想删除proptypes.objectOf
。 objectOf(shape())
将期望有一个对象对象。