首页 > 其他分享 >前端学习随笔 react中的方法bind(this)

前端学习随笔 react中的方法bind(this)

时间:2022-10-06 21:01:08浏览次数:43  
标签:count 函数 render bind react onClickButton 随笔 方法

 1 class ClickCounter extends Component {
 2     constructor(props) {
 3         super(props);
 4         this.state = {count : 0};
 5     }
 6 
 7     onClickButton() {
 8         // console.log(this);
 9         this.setState({count: this.state.count + 1});
10     }
11 
12     render() {
13         return(
14             <div>
15                 <button onClick={this.onClickButton}>Click Me</button>
16                 <div>count : {this.state.count}</div>
17             </div>
18         );
19     }
20 }

点击发现state中的count并不会增加,原因为普通函数中内层函数不能从外层函数中继承this的值,在内层函数中,this会是window或者undefined

所以this.onClickButton方法的this实际上为undefined。

或者用一个抽象的例子来表达:

const test = {
    name:'jack',
    getJack:function(){
        console.log(this.name)
    }
}
const func = test.getJack;
func();

这里的func方法(getJack方法)中的this为window,并非test

对于react来说,onClick就好比func,onClickButton就好比getJeck,所以也无法得到预期中的结果。

解决方案:

1.  onClick={this.onClickButton.bind(this)}

// 有点丑

2. constructor(props){...; this.onClickButton=this.onClickButton.bind(this);...;}

3. onClickButton = () => {.......}

 

React中要注意,在一个方法中调用this.setState()等函数,或者在render()方法中被调用,都有内层函数参与,因此需要将该方法的this绑定到class。所以如果是用function的普通方法定义,需要在constructor中bind(this)【2】,如:

this.onChange = this.onChange.bind(this);

这样this指向组件实例,就可以在render()中使用,也可以在方法中调用this.setState()方法

或者直接用箭头函数进行定义【3】。

this继承自父级方法render(), 而render()的this为组件实例。这样一来,在render()中就可以愉快的使用了

 

标签:count,函数,render,bind,react,onClickButton,随笔,方法
From: https://www.cnblogs.com/tillnight1996/p/16758422.html

相关文章

  • React+hook+ts+ant design封装一个具有编辑和新增功能的页面
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • 前端学习随笔 工具 nrm
    参考:https://www.cnblogs.com/wangmeijian/p/7072053.html当使用官方npm源安装各种包比较慢的时候,建议修改npm源地址nrm工具提供了保存各种源的配置并且一键切换的能力......
  • 博客园第一次随笔
    软件技术基础https://edu.cnblogs.com/campus/zjlg/22rjjc此次作业的目的介绍自己,认识自己,知道自己具有哪些能力,哪些地方需要学习姓名-学号吴子瑞-2020339......
  • 思维飞梭-随笔
    软件技术基础第一次课程随笔作业目标自我介绍;练习写博客的操作姓名-学号谭延鑫-2020330301016一、自我介绍1、基本身份信息hey,这里是谭延鑫的第一次关......
  • 随笔之自我认知
    软件技术基础https://edu.cnblogs.com/campus/zjlg/22rjjc这个作业的目标自我介绍,梳理自己的已有的能力,练习Markdown编辑器;姓名-学号张亮-2020330301050......
  • 第一次随笔
    这个作业属于哪个课程https://edu.cnblogs.com/campus/zjlg/22rjjc这个作业的目标<介绍自己和对课程的展望>姓名-学号<黄杰>-<2020330301062>自我介绍......
  • React组件之间的通信方式总结(下)
    一、写一个时钟用react写一个每秒都可以更新一次的时钟importReactfrom'react'importReactDOMfrom'react-dom'functiontick(){letele=<h1>{new......
  • React-hooks面试考察知识点汇总
    Hook简介Hook出世之前React存在的问题在组件之间复用状态逻辑很难React没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到store)。有一些解决此类问题的......
  • React组件之间的通信方式总结(上)
    先来几个术语:官方我的说法对应代码ReactelementReact元素letelement=<span>A爆了</span>Component组件classAppextendsReact.Component{}无Ap......
  • 随便瞎胡的第一篇随笔
    哈哈哈本蒟蒻终于有博客辽!!!不得不承认我捣鼓了近1h还没弄懂设置(没有理解能力我貌似在1天前才知道有博客这个东西存在(悲先来膜拜一番大佬(蒟蒻瑟瑟发抖,orz希望以后阔以在......