关于this.input的困惑

来源:4-7 React 中 ref 的使用

精雕慕刻

2018-07-27

老师讲的真好,不过在听4-7节的4:05时,对于代码里29行this.input的意义有点不太理解:

根据代码27、28行来参考,this应该是指TodoList这个组件吧,然后this.input的input应该也是指TodoList组件里的input的吧?但是TodoList里并没有实现声明这个变量,所以不知道此处是按照JS的语法自动在使用时直接默认声明为var变量,还是因为TodoList里的render里包含了<input>节点所以指代该节点而不需要声明?(如果原因是后者,我可不可以理解为,我可以直接使用this.label来指代<label>节点?)

学生才疏学浅,还请老师多多指教。

写回答

5回答

Dell

2018-07-27

代码贴上来我看一下

0
4
精雕慕刻
好的,谢谢老师
2018-07-30
共4条回复

我问题有点大

2018-08-06

理解了  ref={(input)=>{this.input=input}} 箭头函数里的参数指向input这个dom节点, this.input 意思是设置一个input属性 让这个属性值等于 箭头函数的参数,即input属性指向input这个DOM节点

所以可以写成 {(input)=>{this.propName=input}}  箭头函数 参数名字也可以随便起

1
0

精雕慕刻

提问者

2018-07-27

class TodoList extends Component {
//省略其它function
  render() {
    return (
        <div>
            <div>
            <label htmlFor='insertArea'>please input todo item ?</label>
            <input 
            id='insertArea' 
            value={this.state.inputValue} 
            onChange={this.handleInputChange}
            ref={(input)=>{this.input=input}} //这一行的this.input是一个之前未声明而直接拿来用的变量吧?
            />
            <button onClick={this.handleBtnClick}>add</button>
            </div>
            <ul>
            {
            this.getTodoItemList()
            }
            </ul>
         </div>
        );
  }

//省略其它function
}


1
1
Dell
是的,不是变量,是一个实例属性
2018-08-01
共1条回复

自驱动

2019-12-31

class Com extends Component {
render(){
    <input ref={x=>{this.attr= x;}} />   // this = Com
    // ref回调函数 执行的时机是didMount后,参数为该组件的具体实例,
       // 即x就是实例,即this.attr就是实例 
      <button onClick={this.handleClick}> btn </button>  // this = Com
}

handleClick = () => {
    console.log(this.attr.value); // this = Com
    // this.attr  =  <input />
  };
}


0
0

我问题有点大

2018-08-06

如果我有两个input呢。。

0
0

React零基础入门到实战,完成企业级项目简书网站开发

主流新技术 React-redux,React-router4,贯穿基础语法

5275 学习 · 2496 问题

查看课程