当前位置: 首页 > 知识库问答 >
问题:

JS绑定有哪些方面?[重复]

林意蕴
2023-03-14

具有以下最简单的组件。

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()”?

共有1个答案

濮冠宇
2023-03-14

或者它只适用于“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最后加载