Javascript 使用Function.call(this,arg1)会导致未定义的

Javascript 使用Function.call(this,arg1)会导致未定义的,javascript,reactjs,Javascript,Reactjs,Main App.jsx 函数从一个单独的文件中删除 在第一张图片的最后一行中,我试图使用.call()从另一个文件调用函数handleOnPageNavigation。我想将这个传递到函数中,这样我就可以更改应该导致页面更新的状态 但单击该项后,控制台会声明无法读取未定义的属性“setState” 我不知道为什么这个被认为是未定义的,因为我通过.call()传入它。如有任何见解,将不胜感激。谢谢您您使用了箭头函数来定义handleOnPageNavigation方法,无论您将什么作为执行上

Main App.jsx

函数从一个单独的文件中删除

在第一张图片的最后一行中,我试图使用.call()从另一个文件调用函数handleOnPageNavigation。我想将这个传递到函数中,这样我就可以更改应该导致页面更新的状态

但单击该项后,控制台会声明无法读取未定义的属性“setState”


我不知道为什么这个被认为是未定义的,因为我通过.call()传入它。如有任何见解,将不胜感激。谢谢您

您使用了箭头函数来定义handleOnPageNavigation方法,无论您将什么作为执行上下文传递给它,它都将忽略所有这些,并接受定义它的上下文。将其转换为普通函数以获取执行上下文

function handleOnPageNavigation(item){
   this.setState({
      page: item.key
   })
}
export { handleOnPageNavigation };
但是,我必须说,这种模式是很难实现的 调试,因此必须始终具有调用setState的函数 在组件内部,而不是组件外部


您已经使用了arrow函数来定义handleOnPageNavigation方法,无论您将什么作为执行上下文传递给它,它都将忽略所有这些,并接受定义它的上下文。将其转换为普通函数以获取执行上下文

function handleOnPageNavigation(item){
   this.setState({
      page: item.key
   })
}
export { handleOnPageNavigation };
但是,我必须说,这种模式是很难实现的 调试,因此必须始终具有调用setState的函数 在组件内部,而不是组件外部


请添加代码段,而不是images@chillbabe104您是否在app.jsx文件中导入了handleOnPageNavigation方法?@akshay1293是的。如果不是,我认为控制台错误可能显示无法找到函数,而不是未定义。请添加代码段,而不是images@chillbabe104您是否在app.jsx文件中导入了handleOnPageNavigation方法?@akshay1293是的。如果不是,我认为控制台错误可能显示无法找到函数,而不是未定义。如果OP真的想从外部更新状态,他可以使用useState挂钩component@DhavalPatel,这个问题与类组件有关。同样,使用钩子,您不会真正从组件外部更新状态,相反,您可以定义维护自己状态的自定义钩子和提供程序处理程序,以将状态更新为使用它们的组件的HOC,这非常有效!非常感谢你的投入。如果某些函数定义正常,而其他函数使用箭头定义,是否会被视为不一致的风格?`如果某些函数定义正常,而其他函数使用箭头定义,是否会被视为不一致的风格,`不完全一致,这取决于您的用例。只有需要封闭作用域中的上下文的函数才需要编写为箭头函数,但只要需要使用封闭上下文,您仍然可以将其他函数定义为箭头函数。如果他确实希望从外部更新状态,则可以使用useState挂钩component@DhavalPatel,这个问题与类组件有关。同样,使用钩子,您不会真正从组件外部更新状态,相反,您可以定义维护自己状态的自定义钩子和提供程序处理程序,以将状态更新为使用它们的组件的HOC,这非常有效!非常感谢你的投入。如果某些函数定义正常,而其他函数使用箭头定义,是否会被视为不一致的风格?`如果某些函数定义正常,而其他函数使用箭头定义,是否会被视为不一致的风格,`不完全一致,这取决于您的用例。只有需要封闭范围中的上下文的函数才需要编写为箭头函数,但只要需要使用封闭上下文,您仍然可以将其他函数定义为箭头函数