您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 邢台分类信息网,免费分类信息发布

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

2024/2/27 23:32:12发布26次查看
本篇文章给大家带来的内容是关于react函数this相关问题的分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
react 函数this相关
在使用react的过程中,常常因为函数的this问题导致执行结果不如预期。现梳理下这块的问题,先看代码:
import react from react;class msglist extends react.purecomponent {  render() {    return (      <ul>        {this.props.list.map((item, index) => (<li key={index}>{item}</li>))}      </ul>    )  }}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 (      <p>        <msglist list={this.state.list}/>        <input type="text" value={this.state.inputmsg} onchange={this.handleinput}/>        <button onclick={this.handlesubmit}>提交</button>      </p>    )  }}
示例代码实现了简单的元素添加和列表展示功能。
其中函数绑定和定义的方式如下:
// 绑定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为<input>元素,但是this为undefined,此时调用this.setstate会报错。
类的方法默认是不会绑定this的,所以这里丢失了函数执行的上下文。那么如果在绑定时候加上一对括号:
<input type="text" value={this.state.inputmsg} onchange={this.handleinput()}/>// 函数定义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)}
这时功能正常。
而最开始我们定义函数时用箭头函数绑定了上下文,所以也能实现想要的功能。
除此之外,还有一种书写方式也可以正常工作,不过实际上与最开始的写法是一样的。
<input type="text" value={this.state.inputmsg} onchange={(e)=>this.handleinput(e)}/>
小结使用react的时候要注意this的指向,类默认是不会为方法绑定this,要么在开始的时候手动绑定this,要么可以使用箭头函数自动绑定上下文。如果不是希望在组件渲染时就触发的函数,那么绑定函数时不能加括号。
以上就是react函数this相关问题的分析(代码示例)的详细内容。
邢台分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录