Javascript const关键字和方法声明的问题
我正在尝试新的React Hooks API,我想知道为什么我的函数组件中的方法声明不起作用:Javascript const关键字和方法声明的问题,javascript,reactjs,Javascript,Reactjs,我正在尝试新的React Hooks API,我想知道为什么我的函数组件中的方法声明不起作用: const Foo = (props) => { const [..., ...] = useState(...); ... onChange = (e) => { ... } 我在下面得到了这个错误 'onChange' is not defined no-undef 但是当我添加const关键字时,它就起作用了 const onChange = (e)
const Foo = (props) => {
const [..., ...] = useState(...);
...
onChange = (e) => { ... }
我在下面得到了这个错误
'onChange' is not defined no-undef
但是当我添加const
关键字时,它就起作用了
const onChange = (e) => { ... }
语法
const Foo = (props) => {/* */}
声明一个普通javascript函数并将其分配给变量Foo
。这不是为了与类混淆。不能像对使用类属性语法的类那样声明“属性”。在课堂上,你可以这样做:
class MyComp extends Component {
onChange = e => {/* ... */} // this declares `onChange` as a property
render() {
// you can use this.onChange here
return (
<input onChange={this.onChange} ... />
)
}
}
但是,这是正确的语法:
const MyComp = () => {
const onChange = e => {/* ... */};
}
但它可能并不像你想象的那样。它只是在MyComp
函数内部创建一个局部变量onChange
。因此,未定义更改时的错误onChange
。将函数分配给变量onChange
,该变量在使用前未声明。首先需要使用关键字const
、let
或var
来声明它
即使您没有声明变量,代码仍然可以工作,因为解释器将其作为一个全局变量声明进行静默处理,这可能不是您想要的。语法
const Foo = (props) => {/* */}
声明一个普通javascript函数并将其分配给变量Foo
。这不是为了与类混淆。不能像对使用类属性语法的类那样声明“属性”。在课堂上,你可以这样做:
class MyComp extends Component {
onChange = e => {/* ... */} // this declares `onChange` as a property
render() {
// you can use this.onChange here
return (
<input onChange={this.onChange} ... />
)
}
}
但是,这是正确的语法:
const MyComp = () => {
const onChange = e => {/* ... */};
}
但它可能并不像你想象的那样。它只是在MyComp
函数内部创建一个局部变量onChange
。因此,未定义更改时的错误onChange
。将函数分配给变量onChange
,该变量在使用前未声明。首先需要使用关键字const
、let
或var
来声明它
即使您没有声明变量,代码仍然可以工作,因为解释器将其作为全局变量声明进行静默处理,这可能不是您想要的。这看起来像一个lint警告,而不是运行时错误。你确定你的代码没有运行吗?是的@NikKyriakides我添加了一个看起来像lint警告的图像,而不是运行时错误。你确定你的代码没有运行吗?是的@NikKyriakides我添加了一个ImagesHanks人,但为什么它在函数体上不工作?原因是什么?@Youssef类被实例化,从而产生实例。函数被调用。这是根本不同的。实例具有属性(可以是函数)。函数有一个包含局部变量的主体。虽然使用箭头函数定义它们在语法上看起来很相似,但这完全是不同的。您可能应该退一步,首先了解javascript函数和类,因为这是使用任何现代javascript框架,甚至任何支持面向对象的编程语言时的基本知识。谢谢,但是为什么它不能在函数体上工作呢?原因是什么?@Youssef类被实例化,从而产生实例。函数被调用。这是根本不同的。实例具有属性(可以是函数)。函数有一个包含局部变量的主体。虽然使用箭头函数定义它们在语法上看起来很相似,但这完全是不同的。您应该退一步,首先了解javascript函数和类,因为这是使用任何现代javascript框架,甚至任何支持面向对象的编程语言时的基本知识。