react函数this相关问题的分析(代码示例)

本篇文章给大家带来的内容是关于react函数this相关问题的分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

react 函数this相关

在使用react的过程中,常常因为函数的this问题导致执行结果不如预期。现梳理下这块的问题,先看代码:

import React from "react";class MsgList extends React.PureComponent {  render() {    return (      
    {this.props.list.map((item, index) => (
  • {item}
  • ))}
) }}export default class List extends React.Component { constructor(props) { super(props) this.state = { inputMsg: '', list: [123] } } handleInput = (val) => { this.setState({ inputMsg: val.target.value }) } handleSubmit = () => { const text = this.state.inputMsg if (text) { const msg = [...this.state.list, text] this.setState({ inputMsg: '', list: msg }) } } render() { return (

) }}

登录后复制

示例代码实现了简单的元素添加和列表展示功能。

其中函数绑定和定义的方式如下:

// 绑定onChange={this.handleInput}// 定义handleInput = (val) => {  this.setState({    inputMsg: val.target.value  })}

登录后复制

定义函数的方式有很多种,比如:

handleInput(val) {  console.log(val.target)  console.log(this)  this.setState({    inputMsg: val.target.value  })}

登录后复制

此时val.target为元素,但是this为undefined,此时调用this.setState会报错。

006tNbRwgy1fx9qh55lp6j314g0feqa5.jpg

类的方法默认是不会绑定this的,所以这里丢失了函数执行的上下文。那么如果在绑定时候加上一对括号:

// 函数定义handleInput(val) {  console.log(val.target)  console.log(this)  this.setState({      inputMsg: val.target.value  })}

登录后复制

此时添加括号,虽然绑定了上下文,但这样会导致函数在组件渲染的时候被触发,而不是等到渲染完成时通过点击触发,且无法响应onChange动作。组件在渲染过程中触发函数,函数中调用setState()会再次调用render,导致死循环。

如果在最开始使用.bind()为函数绑定上下文,去掉绑定函数时的括号,

constructor(props) {  super(props)  this.state = {    inputMsg: 'hello',    list: [123]  }  this.handleInput = this.handleInput.bind(this)}

登录后复制

这时功能正常。

而最开始我们定义函数时用箭头函数绑定了上下文,所以也能实现想要的功能。

除此之外,还有一种书写方式也可以正常工作,不过实际上与最开始的写法是一样的。

this.handleInput(e)}/>

登录后复制

小结

使用react的时候要注意this的指向,类默认是不会为方法绑定this,要么在开始的时候手动绑定this,要么可以使用箭头函数自动绑定上下文。如果不是希望在组件渲染时就触发的函数,那么绑定函数时不能加括号。

以上就是react函数this相关问题的分析(代码示例)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2736818.html

(0)
上一篇 2025年3月8日 01:28:48
下一篇 2025年2月28日 05:28:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue无痕刷新的实现方法介绍

    本篇文章给大家带来的内容是关于vue无痕刷新的实现方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 最近遇到一个需求,需要刷新当前页面来更新数据,网上找了很多方法,在这里做个总结。 这里主要记录三种方法,分别是:强制…

    2025年3月8日
    200
  • ES6中解构赋值的解析(代码示例)

    本篇文章给大家带来的内容是关于es6中解构赋值的解析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 …

    编程技术 2025年3月8日
    200
  • 如何利用原生的JavaScript来实现一个简单的拼图小游戏

    本篇文章的内容是关于如何利用原生的 javascript来实现一个简单的拼图小游戏,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、游戏的基础逻辑 想用一门语言来开发游戏,必须先了解如何使用这门语言来实现一些基础逻辑,比…

    编程技术 2025年3月8日
    200
  • Vue项目数据动态过滤的实现方法

    本篇文章给大家带来的内容是关于vue项目数据动态过滤的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 这个问题是在下在做一个Vue项目中遇到的实际场景,这里记录一下我遇到问题之后的思考和最后怎么解决的(老年程序员记…

    编程技术 2025年3月8日
    200
  • vue.js响应式原理的详解(附代码)

    本篇文章给大家带来的内容是关于vue.js响应式原理的详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监…

    编程技术 2025年3月8日
    200
  • React中类型检查的介绍

    本篇文章给大家带来的内容是关于react中类型检查的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Typechecking With PropTypes 类型检查是为了确保传入组件的参数正确性。 通常在项目中可以使用…

    编程技术 2025年3月8日
    200
  • 如何将JavaScript对象转换为json格式

    JavaScript中要将对象转换为JSON格式字符串,我们需要使用JSON.stringify()方法,下面我们来看具体的内容。 JSON.stringify()语法格式: JSON.stringify([要转换的对象]) 登录后复制 或…

    2025年3月8日
    200
  • javascript性能优化的方法介绍(附示例)

    本篇文章给大家带来的内容是关于javascript性能优化的方法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本文主要是在我读《高性能Javascript》之后,想要记录下一些有用的优化方案,并且就我本身的…

    编程技术 2025年3月8日
    200
  • JavaScript编程的技巧总结

    本篇文章给大家带来的内容是关于javascript编程的技巧总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、oncontextmenu=”window.event.returnValue=false&#…

    编程技术 2025年3月8日
    200
  • React DND实现的卡片排序功能(代码示例)

    本篇文章给大家带来的内容是关于react dnd实现的卡片排序功能(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在公司初学react,其中一个要求让我实现拖拽排序的功能,完成之后记录一下实现方法,采用antd…

    2025年3月8日
    200

发表回复

登录后才能评论