React 中道具属性的道具验证
Props validation for props' properties in React
我可以在一个简单的 React 组件 NewButton 中指定 classes
的 proTypes。
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const styles = () => ({
button: {
display: 'inline-flex',
},
});
function NewButton(props) {
const { classes } = props;
return <Button className={classes.button} variant="outlined" />;
}
NewButton.propTypes = {
classes: PropTypes.shape({}).isRequired,
};
export default withStyles(styles)(NewButton);
但是我从 eslint-plugin-react.
得到了一个错误 'classes.button' is missing in props validation eslint(react/prop-types)
指定 classes.button
的 proTypes 的正确方法是什么?
我想你要找的是这样的:
NewButton.propTypes = {
classes: PropTypes.shape({
button: PropTypes.shape({
display: PropTypes.string.isRequired
})
}).isRequired,
};
既然你在这个文件中定义了上面的结构,并且它是由你注入的,我认为这是没有意义的,否则你每次改变你的样式时都会改变这个形状。
你可以考虑eslint-忽略这个错误,简单定义顶层属性.
Material UI 主题对象也是如此 - 它很大,您绝对不想在使用整个主题对象的每个组件中定义该形状(只是为了安抚eslint)
这样做可能感觉不好,但我发现需要权衡取舍。 PropTypes 的全部意义(对我而言)是为该文件的消费者定义预期的属性。 classes
是由文件本身定义的。
如何为 类 对象定义 propTypes 以接受任何内部结构?
NewButton.propTypes = {
classes: PropTypes.objectOf(PropTypes.any).isRequired,
};
这样,您就不需要更改 linting 规则。
我可以在一个简单的 React 组件 NewButton 中指定 classes
的 proTypes。
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
const styles = () => ({
button: {
display: 'inline-flex',
},
});
function NewButton(props) {
const { classes } = props;
return <Button className={classes.button} variant="outlined" />;
}
NewButton.propTypes = {
classes: PropTypes.shape({}).isRequired,
};
export default withStyles(styles)(NewButton);
但是我从 eslint-plugin-react.
得到了一个错误'classes.button' is missing in props validation eslint(react/prop-types)
指定 classes.button
的 proTypes 的正确方法是什么?
我想你要找的是这样的:
NewButton.propTypes = {
classes: PropTypes.shape({
button: PropTypes.shape({
display: PropTypes.string.isRequired
})
}).isRequired,
};
既然你在这个文件中定义了上面的结构,并且它是由你注入的,我认为这是没有意义的,否则你每次改变你的样式时都会改变这个形状。
你可以考虑eslint-忽略这个错误,简单定义顶层属性.
Material UI 主题对象也是如此 - 它很大,您绝对不想在使用整个主题对象的每个组件中定义该形状(只是为了安抚eslint)
这样做可能感觉不好,但我发现需要权衡取舍。 PropTypes 的全部意义(对我而言)是为该文件的消费者定义预期的属性。 classes
是由文件本身定义的。
如何为 类 对象定义 propTypes 以接受任何内部结构?
NewButton.propTypes = {
classes: PropTypes.objectOf(PropTypes.any).isRequired,
};
这样,您就不需要更改 linting 规则。