The “listener” argument must be of type Function. Received type undefined
我在编写代码时遇到了这样的问题,原本代码是这样写的:
useEffect(() => {
const handleFormEnd = (val) => {
console.log('handleFormEnd', val)
}
EventEmitter.on('STAFF_FORM_TASK_SUCCESS', handleFormEnd());
return () => {
EventEmitter.removeListener('STAFF_FORM_TASK_SUCCESS', handleFormEnd());
}
}, [])
根据报错信息给出的提示,这个事件的注册与触发的参数都是需要传递函数类型的参数。我刚开始没有反应过来,我传递的handleFormEnd()
不就是个函数吗。后来仔细看了一下,我传的参数handleFormEnd()
带了括号,在JS中带括号会触发函数,而不带括号传递的就是函数,而函数的本质其实就是对象。
代码修改后:
useEffect(() => {
const handleFormEnd = (val) => {
console.log('handleFormEnd', val)
}
EventEmitter.on('STAFF_FORM_TASK_SUCCESS', handleFormEnd);
return () => {
EventEmitter.removeListener('STAFF_FORM_TASK_SUCCESS', handleFormEnd);
}
}, [])
这样即可。