react-08-事件-this指向问题

简介: 1.react的第一个重难点,就是作用域问题2.修改this指向的3个方法3.有篇粗浅的理解的 this 文章

1.前言


1.react的第一个重难点,就是作用域问题

2.修改this指向的3个方法

3.有篇粗浅的理解的 this 文章


2.点击切换内容 显示内容 ON/OFF


其实就是个 简单的 开关demo

React只要绑定DOM事件,就要修改this的指向


3. this 指向修改 ---调用的时候 bind


自定义函数中this默认是undefined!!!!!需要自己修改this指向

this指向问题 打印查看

点击切换 toggle的值


class ToggleComponent extends React.Component {
      constructor() {
        super();
        // 初始化状态
        this.state = {
          toggle: true
        };
      }
      toggleHandle(event) {
        console.log("点击了", event);
        console.log(this);
      // 需要用到之前的状态值
        this.setState({
            toggle:!this.state.toggle
        })
      }
      // ----自定义函数----
      render() {
        let { toggle } = this.state;
        return (
          <div>
            {/*   原生:on:click  react: onClick */}
            {/* 注意没加() 给的是函数地址!!    加()就是调用  返回undefined*/}
            <button onClick={this.toggleHandle.bind(this)}>
              {toggle ? "ON" : "OFF"}
            </button>
          </div>
        );
      }
    }
    ReactDOM.render(<ToggleComponent />, box);


3.1 react修改 this指向常用方式

绑定事件的时候bind修改onClick={this.toggleHandle.bind(this)}


4. this指向修改 --构造函数


4.1 构造函数

可以理解为 一生下来 就做个标记


constructor() {
        super();
        // 初始化状态
        this.state = {
          toggle: true
        };
        //   常用方式2 修改自定义函数的this指向问题
        this.toggleHandle = this.toggleHandle.bind(this);
      }


4.2 渲染函数


render() {
        let { toggle } = this.state;
        return (
          <div>
            <button onClick={this.toggleHandle}>
              {toggle ? "ON" : "OFF"}
            </button>
          </div>
        );
      }

4.3 react修改 this指向常用方式

constructor 里面 this.toggleHandle = this.toggleHandle.bind(this);


5.需要注意的点


5.1setState 会返回旧的状态对象

所以当你需要用到 之前的 旧状态  一般通过setState 参数回调函数写法


// this.setState({
        //     toggle:!this.state.toggle
        // })
        this.setState(oldState => {
          //  react调用这个函数,传递一个旧的状态对象
          // 我们返回一个新的状态对象
          return {
            toggle: !oldState.toggle
          };
        });



6. this指向修改 ---箭头函数


this.setState可以直接写到  箭头函数里面,但不推荐在这里面写 除非一行能搞定的


render() {
          let { toggle } = this.state;
          return (
            <div>
              <button
                onClick={ev => {
                  console.log("匿名函数", ev, this);
                  this.toggleHandle(ev);
                }}
              >
                {toggle ? "ON" : "OFF"}
              </button>
            </div>
          );
        }

react修改 this指向常用方式

用箭头函数onClick={ev => { }}


7. 定义阶段使用箭头函数


7.1 class 组件


chooseHandler = ()=>{
                console.log("this:",this);
            }


使用


<li onClick={this.chooseHandler}>小程序</li>


7.2 函数组件中

函数组件中 没有实例 ,所以没有this


const App = () => {
  handleClick = (e) => {
    console.log(e);
  };
  return <div onClick={this.handleClick}>函数组件</div>;
};



8. this总结


1.绑定事件的时候bind修改onClick={this.toggleHandle.bind(this)}   不甚常用

2.用箭头函数onClick={ev => { }}  这种看起来比较优雅

以上2种方式每一次 render渲染的时候都会重新进行 bind绑定,影响性能

3.constructor 里面 this.toggleHandle = this.toggleHandle.bind(this);    比较常用

4.定义的阶段使用箭头函数

以上2种可以避免在render操作中重复绑定




相关文章
|
1月前
|
前端开发 JavaScript
第九章 React中的事件处理
第九章 React中的事件处理
|
1月前
|
前端开发 开发者 UED
【第33期】一文学会用React事件
【第33期】一文学会用React事件
27 0
|
28天前
|
前端开发 调度 开发者
React的事件处理机制
【5月更文挑战第29天】React的事件处理机制
23 2
|
29天前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理按钮的点击行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理按钮的点击行为?
27 1
|
29天前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
27 1
|
1月前
|
存储 前端开发 JavaScript
【亮剑】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
|
1月前
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
|
1月前
|
前端开发 JavaScript 开发者
如何在React中监听键盘事件
如何在React中监听键盘事件
63 0
|
1月前
|
前端开发 JavaScript Java
react事件机制
react事件机制
48 0