javascript - prop 的默认类型取决于另一个 prop 的值

标签 javascript reactjs react-proptypes

我有这个组件可以满足单选或多选功能。如果 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/

相关文章:

javascript - 无法在 Angular js/HTML 中获取单个记录

javascript - Node.js/Mongoose 类型错误

javascript - propTyping 在嵌套组件的每一层重复需要的属性是否有值(value)?

reactjs - Flow 会取代 PropTypes 吗?

javascript - 无法调整标签宽度。查询

javascript - 重定向到 App.js 中 componentDidMount 上的 url

reactjs - Node-sass 是 React 项目的开发依赖还是生产依赖?

reactjs - React TypeScript - 导出多个组件

javascript - 我应该在哪里保存按键的变量?

reactjs - 如何根据其他 prop 的值设置默认 Prop 值?