React中ref

字符串形式的ref

不建议使用已经被废弃了

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>字符串形式的ref</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        //字符串形式的ref
        class MyComponent extends React.Component {
            focus = () => {
                console.log("点我");
                const { myInput } = this.refs;
                console.log(myInput.value);
            }

            blur = () => {
                console.log("我失去焦点");
                const { myInput } = this.refs;
                console.log(myInput.value);
            }
            render() {
                return (
                    <div>
                        <button onBlur={this.blur} ref='input1'>点我失去焦点</button>
                        <input type="text" ref="myInput" />
                        <button onClick={this.focus} ref='input2'>点我</button>
                    </div>
                );
            }
        };
        root.render(<MyComponent />);

    </script>
</body>

</html>

函数回调形式的ref

这样调用ref={currentNode => this.myInput = currentNode}

这样拿值 const { myInput } = this;

console.log(myInput.value);

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>回调形式的形式的ref</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        //回调形式的形式的ref
        class MyComponent extends React.Component {
            focus = () => {
                console.log("点我");
                const { myInput } = this;
                console.log(myInput.value);
            }
            saveDate = (c) => {
                this.myInput = c
            }
            onblur = () => {
                console.log(this.myInput.value);
            }
            render() {
                //                        <!--箭头函数只有一个参数时,可以省略括号 ,当箭头函数语句只有一句时可以省略花括号-->
                return (
                    <div>
                        <p>内联式</p>
                        <input type="text" ref={currentNode => this.myInput = currentNode} />
                        <button onClick={this.focus} >点我</button>
                        <p>放在实例的自身上</p>
                        <input type="text" ref={this.saveDate} onBlur={this.onblur} />
                    </div>
                );
            }
        };
        root.render(<MyComponent />);

    </script>
</body>

</html>

createRef形式的ref

每一个createRef只能接收一个节点

创建ref节点 myRef = React.createRef();

存值 <input type="text" ref={this.myRef} />

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>createRef的形式的ref</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        //createRef的形式的ref
        class MyComponent extends React.Component {
            //createRef形式的ref 只能接收一个元素节点 
            myRef = React.createRef();
            myInput = React.createRef();
            focus = () => {
                console.log(this.myRef.current.value);
            }
            onblur = () => {
                console.log(this.myInput.current.value);
            }
            render() {
                return (
                    <div>
                        <input type="text" ref={this.myRef} />
                        <button onClick={this.focus} >点我</button>
                        <input type="text" onBlur={this.onblur} ref={this.myInput} />
                    </div>
                );
            }
        };
        root.render(<MyComponent />);

    </script>
</body>

</html>
相关推荐
zzjyr几秒前
@umijs/max 中导出的 request 方法,如何实现 GET/POST/PUT/DELETE 这四种核心请求
前端
swipe几秒前
#用这 9 个浏览器 API,我把页面从“卡成 PPT”救回到 90+(每个都有能直接抄的例子)
前端·javascript·面试
zzjyr2 分钟前
基于 @umijs/max 的 request 补充常见错误统一处理、请求取消、重复请求防抖的完整方案
前端
拖拉斯旋风14 分钟前
深入浅出 RAG:从网页爬取到智能问答的完整链路解析
前端
Mintopia28 分钟前
Vite 发展现状与回顾:从“极致开发体验”到生态基础设施
前端
前端双越老师1 小时前
前端面试常见的 10 个场景题
前端·面试·求职
孟祥_成都2 小时前
【全网最通俗!新手到AI全栈开发必读】 AI 是如何进化到大模型的
前端·人工智能·全栈
牛奶2 小时前
AI辅助开发的基础概念
前端·人工智能·ai编程
摸鱼的春哥2 小时前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
明月_清风3 小时前
自定义右键菜单:在项目里实现“选中文字即刻生成新提示”
前端·javascript