如果我有一个定义了PropTypes
的反应组件?测试这一点的最佳方法是什么,以确保在不依赖prop-types
包警告的情况下提供道具?
例如,如果我有这样的组件:
const Button = ({ text }) => <button>{text ? text : 'default button text'}</button>
Button.propTypes = {
text: PropTypes.string.isRequired
}
如果我没有提供道具,我可能想测试它,以确保default button text
被渲染,但在我的文本中,我得到了默认的警告:
console.error node_modulesfbjslibwarning.js:33
Warning: Failed prop type: The prop `text` is marked as required in `Button`, but its value is `undefined`.
我的一部分意见是,PropTypes
意味着我们实际上不需要对此进行测试。我的部分意见是,我们应该将警告和默认文本作为单独的测试用例进行测试。
如有任何想法和意见,我们将不胜感激。
删除.isRequired
的指定,并使用defaultProps
静态属性来分配默认的prop值,而不是执行三元条件。根据需要标记道具,然后尝试为其指定默认值,这是一种反模式。
如果提供默认文本,则不应根据需要标记text
属性。此注释适用于组件在没有此道具提供的值的情况下无法工作的情况。正如我们所看到的,情况并非如此。
您可以使用defaultProps静态属性。如果你没有定义道具,这是一个后备方案。
Button.defaultProps = {
text: 'default text',
}