我有这个组件可以满足单选或多选功能。如果 multiselect 为真,则 initialValue 应为空数组。否则,它应该是一个空对象。在这种情况下设置 defaultProps 看起来有点复杂。有什么方法可以根据 multiselect
的值设置 initialValue
的默认属性?
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,
})
);
如果我将其设置为 {}
,用户仍然可以在不传递 defaultValue 的情况下传递 multiselect={true}
。在这种情况下,多个函数将通过 defaultValue 映射
,而它不是数组,导致数据处理不当以及大量错误。
如果我粗心地假设其他情况,也会发生同样的情况。有什么完美的方法吗?提前致谢。
最佳答案
用通俗的语言来说,这是不可能的。我在我的一些组件中遇到了同样的困境。我的建议是使用两个属性,每个选择类型一个。此外,您可以删除 multiselect 属性并检查它,看我提到的两个属性中哪一个不为空。简而言之:
const wrap = compose(
setPropTypes({
initialSingleValue: PropTypes.object,
initialMultiValue: PropTypes.array,
}),
defaultProps({
initialSingleValue: {}
initialMultiValue: nil,
})
);
希望对你有帮助
关于javascript - prop 的默认类型取决于另一个 prop 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642426/