Javascript React Native中箭头函数和正常函数的区别
所以直到今天,我一直认为arrow函数是普通js函数的一个更好的新版本。我在学习如何使用firestore存储数据时遇到了一个问题,这使我意识到两者是不同的,并且以一种奇怪的方式工作。 他的代码如下所示: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
//组件
函数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我的第一个版本中没有错误。我尝试了很多次,结果都是一样的(我的代码第一次不起作用,单击一次按钮并更改之后就起作用了。我的问题是为什么第一次不起作用,第二次才起作用?