Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript const关键字和方法声明的问题_Javascript_Reactjs - Fatal编程技术网

Javascript const关键字和方法声明的问题

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)

我正在尝试新的React Hooks API,我想知道为什么我的函数组件中的方法声明不起作用:

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框架,甚至任何支持面向对象的编程语言时的基本知识。