Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 React Native中箭头函数和正常函数的区别_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript React Native中箭头函数和正常函数的区别

Javascript React Native中箭头函数和正常函数的区别,javascript,reactjs,react-native,Javascript,Reactjs,React Native,所以直到今天,我一直认为arrow函数是普通js函数的一个更好的新版本。我在学习如何使用firestore存储数据时遇到了一个问题,这使我意识到两者是不同的,并且以一种奇怪的方式工作。 他的代码如下所示: //组件 函数Todos(){ const[todo,setTodo]=useState(“”); const ref=firestore().collection('todos'); // ... 异步函数addTodo(){ wait ref.add({title:todo,comple

所以直到今天,我一直认为arrow函数是普通js函数的一个更好的新版本。我在学习如何使用firestore存储数据时遇到了一个问题,这使我意识到两者是不同的,并且以一种奇怪的方式工作。 他的代码如下所示:

//组件
函数Todos(){
const[todo,setTodo]=useState(“”);
const ref=firestore().collection('todos');
// ...
异步函数addTodo(){
wait ref.add({title:todo,complete:false});
setTodo(“”);
}
// ...

}
箭头功能和正常功能不等效

区别如下:

Arrow函数对此没有自己的绑定,因此this.setState请参考YourClass.setState

使用normal函数,您需要将其绑定到类以获取类的this引用。因此,当您调用this.setState时,实际上它指的是您的函数.setState()

示例代码

class FancyComponent extends Component {
    handleChange(event) {
        this.setState({ event }) // `this` is instance of handleChange
    }

    handleChange = (event) => {
        this.setState({ event }) // `this` is instance of FancyComponent
    }
}

看起来不错,我没有看到任何明显的错误。有什么问题吗?如果非要我猜的话,您的第一个版本可能有一个错误,您在第二个版本中以某种方式修复或更正了该错误。或者某些内容没有完全保存在编辑器中。这是否回答了您的问题?请详细检查摘要
函数绑定
:在
addTodo
todo
中是否有引用此的内容?@drewerese No我的第一个版本中没有错误。我尝试了很多次,结果都是一样的(我的代码第一次不起作用,单击一次按钮并更改之后就起作用了。我的问题是为什么第一次不起作用,第二次才起作用?