React知识点回忆(四)之组件 & refs

本文介绍了JavaScript中refs的三种常见使用方式:字符串形式、回调函数形式以及createRef。重点讲解了回调函数的双调用现象,并强调了官方不建议使用字符串形式ref的原因,包括可能存在的效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、添加refs 属性的三种方式

  • 字符串形式

    		<script>
    	        class CreateRef extends React.Component {
    				render (){
    					return (
    						<div>
    							<input ref="input" type="text" />
    							<button onClick={ this.setInputValue.bind(this, 'input') }>setInputValue</button>
    						</div>
    					)
    				}
    
    				setInputValue = value => {
    					this.refs.input.value = value
    				}
    			}
    
        		ReactDOM.render(<CreateRef />, document.getElementById('box'))
    		</script>
    
  • 回调函数形式

    <script>
        class CreateRef extends React.Component {
    		render (){
    			return (
    				<div>
    					<input ref={ ref => this.input = ref } type="text" />
    					<button onClick={ this.setInputValue.bind(this, 'input') }>setInputValue</button>
    				</div>
    			)
    		}
    
    		setInputValue = value => {
    			this.input.value = value
    		}
    	}
    
        ReactDOM.render(<CreateRef />, document.getElementById('box'))
    </script>
    

    在官方文档中,有这么一句话:如果 ref 回调函数是以内联函数的方式定义的,在更新过程中它会被执行两次,第一次传入参数 null,然后第二次会传入参数 DOM 元素。
    在这里插入图片描述
    在这里插入图片描述

  • createRef

    <script>
        class CreateRef extends React.Component {
    
            input = React.createRef()
    
    		render (){
    			return (
    				<div>
                        <input type="text" ref={ this.input } />
                        <button onClick={ this.btnClick }>点击</button>
    				</div>
    			)
    		}
    
            btnClick = () => {
                console.log(this.input.current)
            }
    	}
    
        ReactDOM.render(<CreateRef />, document.getElementById('box'))
    </script>
    

2、String 类型的 refs 官方不建议使用的原因?()

  • 存在效率问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Ralph

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值