react:检查器不是一个函数

IT技术 javascript reactjs
2021-05-19 12:17:24

我在我的 React 应用程序的控制台中收到了这条奇怪的警告消息。

警告:失败的 propType:检查器不是函数检查Chart.

我根本没有任何检查方法。如果我删除 my propTypes,警告就会消失。有任何想法吗?

我的react组件:

var Chart = React.createClass({
  //...
  propTypes: {
    legend: React.PropTypes.bool,
    max: React.PropTypes.number,
    min: React.PropTypes.number,
    series: React.PropTypes.arrayOf(
      React.PropTypes.shape({
        label: React.PropTypes.string,
        values: React.PropTypes.arrayOf(
          React.PropTypes.arrayOf(
            React.PropTypes.oneOfType(
              React.PropTypes.number,
              React.PropTypes.object // Date
            )
          )
        ),
        colorIndex: React.PropTypes.string
      })
    ).isRequired,
    threshold: React.PropTypes.number,
    type: React.PropTypes.oneOf(['line', 'bar', 'area']),
    units: React.PropTypes.string,
    xAxis: React.PropTypes.arrayOf(React.PropTypes.string)
  },
  render: function() {
    return (<svg>...</svg>);
  }
  //...
});

我发送到 Chart 组件的有效负载是这样的:

var series = [
  {label: 'first', values: [[5,2], [4,3], [3,3], [2,2], [1,1]], colorIndex: "graph-1"},
  {label: 'second', values: [[5,3], [4,2], [3,0], [2,0], [1,0]], colorIndex: "graph-2"}
];
4个回答

就我而言,当我对复杂对象使用 shape 函数时,我得到了这个。解决方案是从:

outerObject: shape({
  firstInnerObject: {
    a: string,
    b: string,
  },
  secondInnerObject: {
    a: string,
    b: number,
  },
}),

到:

outerObject: shape({
  firstInnerObejct: shape({
    a: string,
    b: string,
  }),
  secondInnerObject: shape({
    a: string,
    b: number,
  }),
}),

我知道这很微不足道,但对于和我一样缺乏经验的人来说,这可能是解决方案。;)

拉取请求已合并到 React 存储库中,每当类似的错误再次发生时,它都会为开发人员提供更好的反馈。

现在,验证消息将如下所示:

提供给 oneOf 的参数无效,需要一个数组实例。

https://github.com/facebook/react/pull/3963

这应该是 React 0.14 的一部分。

改变

React.PropTypes.oneOfType(React.PropTypes.number, React.PropTypes.object)

React.PropTypes.oneOfType([React.PropTypes.number, React.PropTypes.object])

(参数应该是一个数组)

FWIW,我得到了Failed PropType: typeChecker is not a function我注意到在我的PropTypes.arrayOf()属性中,我传入了一个 PropTypes 对象,PropTypes.arrayOf({})而不是传入PropTypes.shape()egPropTypes.arrayOf(PropTypes.shape({})

进行此更改消除了错误消息。