我有一个Card
组件和一个CardGroup
组件,当CardGroup
有一个子组件不是Card
组件时,我想抛出一个错误。这是可能的,还是我试图解决错误的问题?
您可以使用自定义proxType函数来验证子级,因为子级只是道具。我还为此写了一篇文章,如果你想要更多的细节。
var CardGroup = React.createClass({
propTypes: {
children: function (props, propName, componentName) {
var error;
var prop = props[propName];
React.Children.forEach(prop, function (child) {
if (child.type.displayName !== 'Card') {
error = new Error(
'`' + componentName + '` only accepts children of type `Card`.'
);
}
});
return error;
}
},
render: function () {
return (
<div>{this.props.children}</div>
);
}
});
您可以使用displayName为每个孩子,通过类型访问:
for (child in this.props.children){
if (this.props.children[child].type.displayName != 'Card'){
console.log("Warning CardGroup has children that aren't Card components");
}
}
对于React 0.14和使用ES6类,解决方案如下所示:
class CardGroup extends Component {
render() {
return (
<div>{this.props.children}</div>
)
}
}
CardGroup.propTypes = {
children: function (props, propName, componentName) {
const prop = props[propName]
let error = null
React.Children.forEach(prop, function (child) {
if (child.type !== Card) {
error = new Error('`' + componentName + '` children should be of type `Card`.');
}
})
return error
}
}
问题内容: 我有一个组件和一个组件,当有不是组件的子代时,我想抛出一个错误。这可能吗,还是我想解决错误的问题? 问题答案: 您可以为每个孩子使用displayName,可通过以下类型进行访问:
我想只允许特定的组件作为孩子。例如,假设我有一个Menu组件,它应该只包含作为子组件,如下所示: 因此,当我尝试将另一个组件作为子组件时,我希望Typescript在IDE中抛出一个错误。有东西警告我,我应该只作为孩子使用。例如,在这种情况下: 此线程几乎类似,但不包括TypeScript解决方案。我想知道这个问题是否可以使用TypeScript类型和接口来解决。在我想象的世界中,它看起来是这样的
这个问题被问了好几次,我花了好几个小时来研究答案。但是,我无法使我的代码正常工作。问题就在这里。 我有一个组件,它是一个包装器。我有多个组件作为子组件进入组件。 在我的组件中,我想创建一个新的子数组,它只由组件组成。我只想忽略其他一切。同时在控制台上显示一些警告,除了组件子元素之外的任何内容都将被忽略,这很好,但无论如何,这在这一点上并不重要。 问题是,我正在使用TypeScript,无法访问。
我有这样一个功能组件:
问题内容: 假设我有三个隔离的公共类(没有IS-A关系)A,B和C。我想在C中定义一个字段,使其类型可以是A或B。 目前,我通过定义C来实现这一目标: 上面的代码仅在运行时会引发异常。但是,我更希望在使用A或B以外的任何类型构造C的情况下,在编译时本身抛出错误,以生成编译器错误。 问题答案: 将构造函数设为私有: 然后提供静态工厂方法来创建特定类型的实例: 这不会阻止您使用 类型 ; 您只是无法创
问题内容: 我想使用数据库模型为我的项目控制一些配置设置。例如: 此模型应该只有一个实例: 当然,如果有人不小心创建了一个新实例,那就不是世界末日了。我可以做。但是,是否有一种方法可以将其锁定,从而无法创建多个实例? 鉴于Django从那时起发生了很大变化,是否有解决此问题的标准方法?还是我应该只使用并接受可能重复的内容? 问题答案: 您可以重写方法以控制实例数: