Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 是';s生命周期方法自动绑定?如果不是的话,我们应该用这个来约束他们吗?_Javascript_Reactjs_Ecmascript 6_Es6 Class - Fatal编程技术网

Javascript 是';s生命周期方法自动绑定?如果不是的话,我们应该用这个来约束他们吗?

Javascript 是';s生命周期方法自动绑定?如果不是的话,我们应该用这个来约束他们吗?,javascript,reactjs,ecmascript-6,es6-class,Javascript,Reactjs,Ecmascript 6,Es6 Class,我认为这个标题是相当自我描述的 我已经使用类表示法构建了react组件,并且我注意到,handleSomething必须手动绑定到this,render和组件将挂载。方法是否已绑定到此上?出于一致性考虑,手动绑定可以吗?了解JavaScript中的“this” 函数中的“this”关键字由函数的执行范围决定。例如,当使用obj.someFunction()调用时,someFunction中的this将是obj 一个更具体的例子: 函数handleClick(){ console.log(this

我认为这个标题是相当自我描述的

我已经使用类表示法构建了react组件,并且我注意到,
handleSomething
必须手动绑定到
this
render
组件将挂载
。方法是否已绑定到此上?出于一致性考虑,手动绑定可以吗?

了解JavaScript中的“this” 函数中的“this”关键字由函数的执行范围决定。例如,当使用
obj.someFunction()
调用时,
someFunction
中的
this
将是
obj

一个更具体的例子:

函数handleClick(){
console.log(this.state.value);
}
变量状态={value:1};//在窗口中声明一个变量
log(“handleClick()”);
handleClick();//记录1。方法中的“this”将是window,因为该方法是在window中调用的
var obj={
状态:{value:2},
handleClick:function(){
console.log(this.state.value);
},
};
log(“obj.handleClick();”);
对象handleClick();//记录2。“this”指的是obj,因为该方法是在obj中调用的。
//让我们将函数重新分配给窗口中的临时变量
var temp=对象把手舔;
log(“temp()”);
temp();//记录1。函数中的“this”被引用到窗口,因为该方法是在窗口中调用的。
console.log(“window.temp()”);
window.temp();//这与上面的一个相等。
控制台日志(“临时绑定(obj)”;
温度绑定(obj)(;//记录2。绑定该方法并调用该方法,因此函数中的“this”被引用到obj。
console.log(“临时绑定(this)”);
临时绑定(this)(;//记录1。因为这在执行范围中是窗口。这实际上是同一个召唤。
控制台日志(“临时绑定(窗口)”;
临时绑定(窗口)(;//记录1。这与上面的一个相等。
请在此处尝试:

关于此的博客帖子:

回到你的问题上来 如果查看类中定义的
render
组件willmount
handleSomething
,就会明白为什么需要将处理程序绑定到此

提供 这就是react call
redner()
,其中实例是具有状态、道具等的对象实例。通过在渲染方法中放置断点并返回调用堆栈,您可以非常轻松地进行尝试

把手 例如,如果您这样定义类,则使用按钮的
onClick
回调方法
handleSomething

class Button extends Component {
  handleSomething() {
    // 'this' will be undefined.
  }

  render() {
    return (<button onClick={this.handleSomething}>Test</button>);
  }
}
其中,
func
handleSomething
context
在我的调试经验中通常是
undefined
,而
funcArgs
是在函数中传递的参数

apply
类似于
bind
。第一个参数用于指定函数的
this
,第二个参数是要传递到函数中的参数数组

有关应用的更多信息,请参见MDN:

在这种情况下,调用方法
handleSomething
时使用
undefined
作为
this
;因此,如果没有绑定该方法,则
将是
未定义的

我注意到,虽然handleSomething必须手动绑定到此, 渲染和组件将不会装载。方法是否受此约束 已经

它们是通过类的实例调用的,因此它们已经将
this
作为您的实例,而不使用
bind
。我想你可以说它已经绑定到了这个

出于一致性考虑,手动绑定可以吗

您不需要使用react的生命周期方法绑定
。如果你真的想,我想你也可以把这些方法绑定到
这个
(可能有一些副作用我不知道,因为我没有深入研究它们的源代码),但这就像做
obj.handleClick.bind(obj)()而不是
obj.handleClick()。这是不必要的,并且会花费一些时钟周期来做一些不需要的事情。

了解JavaScript中的“this” 函数中的“this”关键字由函数的执行范围决定。例如,当使用
obj.someFunction()
调用时,
someFunction
中的
this
将是
obj

一个更具体的例子:

函数handleClick(){
console.log(this.state.value);
}
变量状态={value:1};//在窗口中声明一个变量
log(“handleClick()”);
handleClick();//记录1。方法中的“this”将是window,因为该方法是在window中调用的
var obj={
状态:{value:2},
handleClick:function(){
console.log(this.state.value);
},
};
log(“obj.handleClick();”);
对象handleClick();//记录2。“this”指的是obj,因为该方法是在obj中调用的。
//让我们将函数重新分配给窗口中的临时变量
var temp=对象把手舔;
log(“temp()”);
temp();//记录1。函数中的“this”被引用到窗口,因为该方法是在窗口中调用的。
console.log(“window.temp()”);
window.temp();//这与上面的一个相等。
控制台日志(“临时绑定(obj)”;
温度绑定(obj)(;//记录2。绑定该方法并调用该方法,因此函数中的“this”被引用到obj。
console.log(“临时绑定(this)”);
临时绑定(this)(;//记录1。因为这在执行范围中是窗口。这实际上是同一个召唤。
控制台日志(“临时绑定(窗口)”;
临时绑定(窗口)(;//记录1。这与上面的一个相等。
请在此处尝试:

关于此的博客帖子:

回到你的问题上来 如果查看
渲染
组件将挂载
,以及
handl
class Button extends Component {
  handleSomething() {
    // 'this' will be undefined.
  }

  render() {
    return (<button onClick={this.handleSomething}>Test</button>);
  }
}
  function callCallback() {
    fakeNode.removeEventListener(evtType, callCallback, false);
    // This is where react calls your method.
    func.apply(context, funcArgs);
    didError = false;
  }