reactjs - 我什么时候需要在 reactJS 中使用 bind() 和 react native
问题描述
所以当我创建一个类时,它通常看起来像这样
export default class SettingsIndex extends Component {
constructor(props) {
super(props);
this.state = {
testValue: 1,
};
}
myfunction(){
this.setstate({value: 2)
}
render(){
return(
........
问题1:老实说,我不确定什么时候真的需要构造函数,我的理解是每次类从父组件接收道具时我都需要声明构造函数,这是假设更正吗?
问题 2:myfunction()
在某些类中看到它没有问题,但是在某些类中我得到一个错误,说 ```this.myfunction' 是未定义的,然后我需要像这样在构造函数中绑定(this)
this.myfunction= this.myfunction.bind(this);
我不确定为什么在某些类this
中可以访问而不是其他类,知道吗?
解决方案
仅当您需要在第一次渲染之前运行一些初始化逻辑时才需要使用构造函数,例如初始化 refs、状态或绑定函数。你不需要构造函数只是因为你的组件正在接收道具,React 本身可以为你做道具转发
对于您的情况,您也可以通过适当的 babel 设置将 state 定义为类初始化程序并摆脱构造函数
export default class SettingsIndex extends Component {
state = {
testValue: 1,
};
myfunction(){
this.setstate({value: 2)
}
}
现在关于绑定的问题,你首先需要了解一个函数是如何接收它的context
或this
变量的。
函数调用的this
参数作为调用函数的对象的引用被接收,除非函数被定义为箭头函数,在这种情况下,它this
从其周围范围继承变量,或者通过使用调用显式覆盖,应用或绑定方法
例如,在 React 的生命周期方法中,this 变量已经指向类实例,调用函数 usingthis.myFunction()
将导致 myFunction 接收类的上下文,因为调用它的对象是this
。
另一方面,当您将函数分配给事件处理程序时,您正在分配对它的引用,并且当事件发生时,函数在窗口引用this
上被调用,导致未定义,因此需要您使用arrow function
或explicit bind
提供适当的上下文.
查看此 SO 帖子以获取有关此关键字的更多详细信息
推荐阅读
- python - 安装程序。如何将所有 python 代码放入 zip 文件而不是放入嵌入式 PYZ
- reactjs - 有没有办法使用 react native 下载图像,我目前有一个 base64 字符串用于使用 android 下载管理器(没有 url!)?
- swift - 为什么使用 SwiftUI 按钮的图像背景不显示在工具栏中?
- variables - 将 HTCondor 中的 $(Process) 编号更改为 1 而不是 0
- python - pip install ecapture 会产生错误。我该如何解决这个问题?
- c++ - 具有自定义构造函数的类中的 std::vector::emplace_back 错误
- mysql - 是否可以基于单个列创建 SQL 语句?
- javascript - 角度以百分比显示十进制值
- java - 具有相同名称的元素和子元素的杰克逊 XML 映射器
- file - PosScript 可以使用相对的 windows 文件名吗?