具有以下最简单的组件。
class App extends Component {
constructor(props) {
super(props);
console.log(this);
this.state = {
name: "John"
}
}
clickHandler() {
this.setState({
name: "Mark"
})
};
render() {
return (
<div className="App">
{this.state.name}
<button onClick={this.clickHandler.bind(this)}></button>
</div>
)
};
}
export default App;
如果我写的话
<button onClick={this.clickHandler}></button>
上面说这个在
this.setState({
name: "Mark"
})
是未定义的。那一行
<button onClick={console.log(this)}></button>
显示这是App。那么如果这是App为什么clickHandler不自动绑定到点之前的那个对象呢?
<button onClick={this.clickHandler}></button>
据我所知,在“context.function”中,上下文应该绑定到函数。或者它只适用于“context.function()”?
或者它只适用于“context.function()”?
完全正确。这取决于调用函数的位置。
正在做
<button onClick={this.clickHandler}></button>
将单击处理程序
作为参数传递。React 的内部结构与以下方面并无完全不同:
function button({ onClick }) {
// ...
theActualDOMButtonElement.addEventListener('click', onClick);
}
或
function button({ onClick }) {
// ...
theActualDOMButtonElement.addEventListener('click', (e) => {
const reactCreatedSyntheticEvent = retrieveSyntheticEvent(e);
onClick(reactCreatedSyntheticEvent);
});
}
您正在传递<code>这个。clickHandler作为参数,而不是立即调用它-因为它是在以后调用的,并且它的调用方式决定了<code>this,如果不确保<code>this</code>是正确的,例如通过内联调用函数、使用类字段或使用函数组件,就不能只执行<code>={this.ClickHandlder}</code>操作。
本文向大家介绍js函数定义方式有哪些?相关面试题,主要包含被问及js函数定义方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 三种 var a = function(){} function a(){} var a =new Function(){}
本文向大家介绍js面向对象的继承方式有哪些?相关面试题,主要包含被问及js面向对象的继承方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 原型链继承 核心: 将父类的实例作为子类的原型 特点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 缺点: 要想为子类新增属性和方法,不能放到构造器中 无法实现多继承 来自原
本文向大家介绍js异步加载有哪些方案?相关面试题,主要包含被问及js异步加载有哪些方案?时的应答技巧和注意事项,需要的朋友参考一下 1.将script标签放在body结束标签之前 这种方案会先加载dom树,然后再加载js脚本 2.在onload方法中给dom树动态添加script标签 这种方案也是先加载dom树,然后触发onload方法添加script标签加载js脚本 3.使用defer属性 这种
本文向大家介绍js函数调用方式有哪些?相关面试题,主要包含被问及js函数调用方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 function func() { console.log(1) } func(); func.apply(); func.call();
本文向大家介绍vue父子组件双向绑定的方法有哪些?相关面试题,主要包含被问及vue父子组件双向绑定的方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 1.利用对象的引用关系来实现 2.父子组件之间的数据传递 3.使用.sync修饰符
本文向大家介绍js延迟加载的方式有哪些?相关面试题,主要包含被问及js延迟加载的方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 defer 属性 async 属性 动态创建DOM方式 使用jQuery的getScript方法 使用setTimeout延迟方法 让JS最后加载