React -(嵌套)道具类型无效;它必须是一个函数

React - (nested) prop type is invalid; it must be a function

当我启动我的应用程序时,我的控制台会记录以下内容:

Warning: Failed prop type: Home: prop type home is invalid; it must be a function

我在网上看过,但没有看到任何嵌套 prop-type 返回此错误的案例或示例,因此我正在努力纠正警告,这是我的代码:

Home.propTypes = {
  home: {
    readyStatus: PropTypes.string,
    list: PropTypes.arrayOf(PropTypes.object),
  },
  fetchUsersIfNeeded: PropTypes.func,
};

Home.defaultProps = {
  home: () => {},
  readyStatus: '',
  fetchUsersIfNeeded: () => {},
};

如有任何帮助或建议,我们将不胜感激 - 提前致谢!

我认为问题出在写法上

Home.propTypes = {
  home: PropTypes.shape({
    readyStatus: PropTypes.string,
    list: PropTypes.arrayOf(PropTypes.object).isRequired,
  }),
  fetchUsersIfNeeded: PropTypes.func,
};

Home.defaultProps = {
  home: {
    list: [],
    readyStatus: '',
  },
  fetchUsersIfNeeded: () => {},
};

第一个解决方案使两种类型都类似于一个对象,它应该可以工作。其他选项可以是:

Home.propTypes = {
  home: PropTypes.func,
  fetchUsersIfNeeded: PropTypes.func,
};

Home.defaultProps = {
  home: () => {},
  fetchUsersIfNeeded: () => {},
};

这里我们将 prop 类型作为一个函数,以便两个实例的类型匹配。

一个快速提示,如果家是一个状态对象,那么它应该是一个类似于解决方案 1 的对象,或者如果家是从其他状态或网络调用或任何东西派生的计算值,那么您应该使用函数。

如果你想更好地检查函数类型,你也可以查看 flow.org。

请注意,我尚未测试此代码,但它应该可以解决问题。