javascript - prop 的默认类型取决于另一个 prop 的值
问题描述
我有这个组件可以满足单选或多选功能。如果 multiselect 为真,则 initialValue 应该是一个空数组。否则,它应该是一个空对象。在这种情况下,设置 defaultProps 看起来有点复杂。有什么方法可以initialValue
根据 的值设置默认道具multiselect
吗?
const wrap = compose(
setPropTypes({
initialValue: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
multiselect: PropTypes.bool,
}),
defaultProps({
initialValue: // [] or {} or ((otherProps) => otherProps.multiselect ? [] : {}) ??? , if there is such thing
multiselect: false,
})
);
如果我将其设置为{}
,用户仍然可以通过multiselect={true}
而不通过 defaultValue。在这种情况下,几个函数将map
通过 defaultValue 而它不是一个数组,导致数据处理不当和许多错误。
如果我只是不小心假设其他情况,也会发生同样的情况。有什么完美的方法吗?提前致谢。
解决方案
用简单的语言,这是不可能的。我在我的几个组件中遇到了同样的困境。我的建议是使用两个属性,每个选择类型一个。此外,您可以删除多选属性并检查我提到的两个属性中的哪一个不为空。简而言之:
const wrap = compose(
setPropTypes({
initialSingleValue: PropTypes.object,
initialMultiValue: PropTypes.array,
}),
defaultProps({
initialSingleValue: {}
initialMultiValue: nil,
})
);
我希望这可以帮助你。
推荐阅读
- python-3.x - AttributeError:“属性”对象没有属性“__name__”
- mongodb - Mongodb如何更新数组中的最后一项
- php - Laravel 403 禁止自定义请求验证
- android - 为什么克隆Android源代码后目录“external/qemu”不见了?
- scala - 将数组的Dataset转换为DataFrame
- java - Itext 生成的 PDF 文档到 S3 服务器
- python - 如何用列迭代地填充熊猫数据框
- asp.net-core-mvc - 实体框架核心中十进制的错误消息
- forms - Vuetify - 如何在表单上标记文本左侧和文本字段右侧
- php - Zend Db Illegal mix of collations and sytnax error using COLLATE