React三大组件--ref

1.定义:组件内的标签可以定义ref属性来标识自己。

2.使用ref的三种方法

  • 字符串形式的ref (这个写法会慢慢替换掉,所以尽量不要写字符串形式)
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1_字符串形式的ref</title>
</head>
<body>
    <div id="text"></div>

    <script src="../../js/react.development.js"></script> 
    <script src="../../js/react-dom.development.js"></script> 
    <script src="../../js/babel.min.js"></script> 
    <script type="text/babel">
        class Demo extends React.Component{
            // 左侧
            left = ()=>{
                const input = this.refs.input1
                alert(input.value)
                console.log(this.refs.input1)
            }
            // 右侧
            right = ()=>{
                const input = this.refs.input2
                alert(input.value)
            }
            render(){
                return (
                    <div>
                        <input ref="input1" type="text" placeholder="点击确定弹框" />
                        <button onClick={this.left}>确定</button>
                        <input ref="input2" onBlur={this.right} type="text" placeholder="失去焦点弹框" />
                    </div>

                )
            }
           
        }
        ReactDOM.render(<Demo />,document.getElementById('text'))
    </script>
</body>
</html>
  • 回调形式的ref(主推用这个形式写)
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2_回调形式的ref</title>
</head>
<body>
    <div id="text"></div>

    <script src="../../js/react.development.js"></script> 
    <script src="../../js/react-dom.development.js"></script> 
    <script src="../../js/babel.min.js"></script> 
    <script type="text/babel">
        class Demo extends React.Component{
            // 左侧
            left = ()=>{
                console.log('@',this)
                const input = this.input1
                alert(input.value)
                console.log(this)
            }
            // 右侧
            right = ()=>{
                const input = this.input2
                alert(input.value)
            }
            render(){
                return (
                    <div>
                        <input ref={(c)=>{this.input1 = c}} type="text" placeholder="点击确定弹框" />
                        <button onClick={this.left}>确定</button>
                        <input ref={(c)=>{this.input2 = c}} onBlur={this.right} type="text" placeholder="失去焦点弹框" />
                    </div>

                )
            }
           
        }
        ReactDOM.render(<Demo />,document.getElementById('text'))
    </script>
</body>
</html>
  • createRef 创建 ref 容器(这个相对来说比较麻烦一些

    html 复制代码
    <div id="text"></div>
    <script src="../../js/react.development.js"></script> 
    <script src="../../js/react-dom.development.js"></script> 
    <script src="../../js/babel.min.js"></script> 
    <script type="text/babel">
        class Login extends React.Component {
            createRef1= React.createRef()
            createRef2= React.createRef()
            left= ()=>{
                const input = this.createRef1
                alter(input.value)
            }
            left= ()=>{
                const input = this.createRef2
                alter(input.value)
            }
            render(){
                //这样写是把username和password 放在了login中,如果还是很迷糊不知道在那的话,可以在left函数中输出this
                return (
                    <div>
                            <input ref={this.createRef1} type="text" placeholder="点击确定弹框" />
                            <button onClick={this.left}>确定</button>
                            <input ref={this.createRef2} onBlur={this.right} type="text" placeholder="失去焦点弹框" />
                        </div>
                )
            }
        }
        ReactDOM.render(<Login />,document.getElementById('text'))
    </script>
相关推荐
Myli_ing39 分钟前
HTML的自动定义倒计时,这个配色存一下
前端·javascript·html
dr李四维1 小时前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
雯0609~1 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ1 小时前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z1 小时前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
彭世瑜2 小时前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4042 小时前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish2 小时前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five2 小时前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序2 小时前
vue3 封装request请求
java·前端·typescript·vue