I\'m getting this weird warning message in the console for my React app.
Warning: Failed propType: checker is not a function Check the render method of <
In my case I got this when I used the shape function with a complex object. The solution was to go from:
outerObject: shape({
firstInnerObject: {
a: string,
b: string,
},
secondInnerObject: {
a: string,
b: number,
},
}),
To:
outerObject: shape({
firstInnerObejct: shape({
a: string,
b: string,
}),
secondInnerObject: shape({
a: string,
b: number,
}),
}),
Very trivial, I know, yet this might be the solution for someone equally inexperienced as I am. ;)
FWIW, I was getting Failed PropType: typeChecker is not a function
. I noticed that in my PropTypes.arrayOf()
properties, I was passing in an object of PropTypes e.g. PropTypes.arrayOf({})
instead of passing in PropTypes.shape()
e.g. PropTypes.arrayOf(PropTypes.shape({})
Making this change eliminated the error message.
In my case I'd simply accidentally removed a type:
grValue: PropTypes, // instead of PropTypes.string
I too got this error on putting proptypes in wrong format:
static propTypes = {
workHard: PropTypes.func.isRequired,
winBig: PropTypes.shape({
prize: { // issue
PENDING: PropTypes.bool,
},
}),
};
Turns out, prop types are expected to be either of type PropTypes.shape
or PropTypes.objectOf
when it comes to declaring object
props
So, error was fixed upon changing code to this:
static propTypes = {
workHard: PropTypes.func.isRequired,
winBig: PropTypes.shape({
prize: PropTypes.shape({
SUCCESS: PropTypes.bool,
}),
}),
};
A pull request has been merged to the React repo that provides a better feedback for the developer whenever a mistake like this happens again.
Now, the validation message will look like the following:
Invalid argument supplied to oneOf, expected an instance of array.
https://github.com/facebook/react/pull/3963
This should be part of React 0.14.
My version of Warning: Failed propType: checker is not a function
came from forgetting to use PropTypes.shape for an object.
Changing:
someProps: {
prop: React.PropTypes.string,
anotherProp: React.PropTypes.number,
}
to this fixed the problem:
someProps: React.PropTypes.shape({
prop: React.PropTypes.string,
anotherProp: React.PropTypes.number,
})