【发布时间】:2016-09-09 17:04:11
【问题描述】:
在 React 中,您可以指定需要哪些道具以及它们应该具有哪些类型。当未知的 prop 名称(例如 propTypes 中未指定)传递给组件时,是否有可能显示验证警告?
【问题讨论】:
标签: javascript validation reactjs properties
在 React 中,您可以指定需要哪些道具以及它们应该具有哪些类型。当未知的 prop 名称(例如 propTypes 中未指定)传递给组件时,是否有可能显示验证警告?
【问题讨论】:
标签: javascript validation reactjs properties
有了高阶组件,一切皆有可能:
// This is not a full solution, merely a sketch of one way to do it
const OnlyValidProps = WrappedComponent => {
return class extends React.Component {
render() {
const actualProps = Object.keys(this.props);
const expectedProps = Object.keys(WrappedComponent.propTypes);
const hasPropMisMatch = (
actualProps.length != expectedProps.length ||
!actualProps.every(key => expectedProps.contains(key))
);
if (hasPropMisMatch) {
console.warn(`Props mismatch! expected: ${expectedProps} actual: ${actualProps}`);
}
return <WrappedComponent {...this.props} />;
}
};
}
// Usage
OnlyValidProps(class MyClass extends React.Component {
static propTypes = {
x: React.PropTypes.number,
y: React.PropTypes.number
}
});
【讨论】:
render 中的组件之前调用任何方法,但是是的,它肯定会。
super.render() 但忽略返回值...但您可以这样做。