Javascript 反应:检查器不是一个函数

Javascript 反应:检查器不是一个函数,javascript,reactjs,Javascript,Reactjs,我在我的React应用程序的控制台中收到了一条奇怪的警告消息 警告:失败的propType:checker不是检查图表的渲染方法的函数 我根本没有任何检查方法。如果我删除我的propTypes,警告将消失。有什么想法吗 我的反应组件: var Chart=React.createClass({ //... 道具类型:{ 图例:React.PropTypes.bool, max:React.PropTypes.number, min:React.PropTypes.number, 系列:React

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

警告:失败的propType:checker不是检查
图表的渲染方法的函数

我根本没有任何检查方法。如果我删除我的
propTypes
,警告将消失。有什么想法吗

我的反应组件:

var Chart=React.createClass({
//...
道具类型:{
图例:React.PropTypes.bool,
max:React.PropTypes.number,
min:React.PropTypes.number,
系列:React.PropTypes.arrayOf(
反应({
标签:React.PropTypes.string,
值:React.PropTypes.arrayOf(
React.PropTypes.arrayOf(
React.PropTypes.oneOfType(
React.PropTypes.number,
React.PropTypes.object//Date
)
)
),
colorIndex:React.PropTypes.string
})
).要求,
阈值:React.PropTypes.number,
type:React.PropTypes.oneOf(['line'、'bar'、'area']),
单位:React.PropTypes.string,
xAxis:React.PropTypes.arrayOf(React.PropTypes.string)
},
render:function(){
回报率(…);
}
//...
});
我发送给图表组件的有效载荷如下:

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"}
];
改变


(参数应该是一个数组)

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

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

提供给其中一个的参数无效,应为数组实例


这应该是React 0.14的一部分。

FWIW,我得到了
失败的PropType:typeChecker不是一个函数。我注意到在我的
PropTypes.arrayOf()
PropTypes.arrayOf({})属性中,我传入的是一个PropTypes对象,例如
PropTypes.arrayOf({})
,而不是
PropTypes.shape()
PropTypes.arrayOf(PropTypes.shape({})


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

在我的例子中,我是在对复杂对象使用形状函数时得到的。 解决方案是:

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


我知道这很简单,但对于像我这样没有经验的人来说,这可能是一个解决方案。

我的
版本警告:失败的propType:checker不是一个函数
是因为忘记使用对象的PropTypes.shape

更改:

someProps: {
    prop: React.PropTypes.string,
    anotherProp: React.PropTypes.number,
}
要解决此问题,请执行以下操作:

someProps: React.PropTypes.shape({
    prop: React.PropTypes.string,
    anotherProp: React.PropTypes.number,
})

我使用带有字符串数组的
oneOfType
作为参数,而实际上我打算使用
oneOfType

诸如此类:

// Wrong!
PropTypes.oneOfType(['s', 'm'])

// Right!
PropTypes.oneOf(['s', 'm'])

这个问题背后的真正解释是react需要一个从技术上讲是函数的PropType,akachecker。检查器功能的示例包括:

PropTypes.array
PropTypes.shape({...})
PropTypes.bool
你有这个想法。。。因此,这里发生的情况是,当您传入非检查程序的内容时,例如
未定义的
,react将不知道该如何处理,因此会抱怨:

checker不是一个函数

在我的例子中,原因是检查器函数拼写错误:

PropTypes.shape({
    cats: PropTypes.Array // this is undefined
})
正确的版本应为:

PropTypes.shape({
    cats: PropTypes.array // lowercase is correct!
})
反应16

在这个错误的我的版本中我有一个对象数组:

data: PropTypes.shape([{
  id: PropTypes.number,
  ...
}])
解决方案是制作一组形状,如下所示:

data: PropTypes.arrayOf(
  PropTypes.shape({
    id: PropTypes.number,
    ...
  })
)

我在将proptypes放入错误格式时也遇到了这个错误:

static propTypes = {
  workHard: PropTypes.func.isRequired,
  winBig: PropTypes.shape({
    prize: { // issue
      PENDING: PropTypes.bool,
    },
  }),
};
事实证明,在声明
对象
道具时,道具类型应为类型
PropTypes.shape
PropTypes.objectOf

因此,将代码更改为以下内容时,错误已修复:

static propTypes = {
  workHard: PropTypes.func.isRequired,
  winBig: PropTypes.shape({
    prize: PropTypes.shape({
      SUCCESS: PropTypes.bool,
    }),
  }),
};

还有一个有趣的例子:) 在我的例子中,我将经常使用的模型提取到单独的文件中并导入它们。因此,proptype定义如下所示:

 static propTypes = {
        ...
        selectedAction: shape(ACTION),
        ...
};
我的错误是在形状上写了一个额外的卷曲:

static propTypes = {
        ...
        selectedAction: shape({ACTION}),
        ...
};

就我而言,我只是意外删除了一个类型:

grValue: PropTypes, // instead of PropTypes.string

在我的例子中,我验证道具是错误的。我忘了将profile对象包装到
PropTypes
shape方法中

错误

Component.propTypes={
viewProfile:PropTypes.shape({
profile:{//它是一个没有PropTypes shape方法的普通对象
名字:PropTypes.string,
lastName:PropTypes.string,
profileImage:PropTypes.string,
},
}).要求,
};
解决方案

Component.propTypes={
viewProfile:PropTypes.shape({
profile:PropTypes.shape({
名字:PropTypes.string,
lastName:PropTypes.string,
profileImage:PropTypes.string,
}),
}).要求,
};

我从错误消息中得到的印象是,在图表组件的渲染方法中的某个地方,您试图对没有“checker”方法的对象调用“checker”方法。抱歉,没有。我已检查了图表组件,没有调用checker。我检查了React源代码,它们有一些checker函数。但我不知道如何解决这个问题。将您的
propTypes
复制并粘贴到不同的项目中不会显示错误,因此我同意@hugomg;这可能是
图表
组件的下游错误(例如,子对象中存在错误的propType)。如果坏的道具类型不容易识别,我可能会开始逐个删除
propTypes
来追踪它。你能提供你的渲染功能吗?@AlanSouza我的意思是
React.propTypes.oneOfType(React.propTypes.number,React.propTypes.object)
应该是
React.propTypes.oneOfType([React.PropTypes.number,React.PropTypes.object])
someous!感谢您提交PR以获得此修复顺便说一句:当数组中的
PropType
无效时,也会出现此错误消息。我使用
PropType.boolean
而不是
PropType.bool
,它写入了
警告:失败的PropType:checker不是函数检查react 0.14上的
呈现方法。3有意思……也许是另一个原因
 static propTypes = {
        ...
        selectedAction: shape(ACTION),
        ...
};
static propTypes = {
        ...
        selectedAction: shape({ACTION}),
        ...
};
grValue: PropTypes, // instead of PropTypes.string