美文网首页
react-12-单向数据流-ref-双向绑定的实现

react-12-单向数据流-ref-双向绑定的实现

作者: 云高风轻 | 来源:发表于2021-07-24 17:59 被阅读0次

    1. 前言

    写了了这么久 ,其实有个在vue里面我们经常使用的东西,在react里面至今都没提,
    那就是vue里面的双向绑定,首先react里面是没有 双向绑定的,需要自己去实现
    接下来,就一起来玩下吧,更多的 react和其他框架的区别,请看最下方的官方对比链接


    2. 需求 - 代码逻辑梳理

    2.1 需求

    2.gif

    2.2 基础分析

    1. 使用类组件
    2. 标签显示输入框的内容
    3. 一个输入框
    4. 一个提交按钮 这个按钮不是必须的

    3. 基础代码

    inputvalue值 和 标签显示的值, state里面定义的值保持一致

    class HelloMessage extends React.Component{
                    state ={
                        message:"初始值"
                    }
                    // -----自定义函数
                    changeHandle(){
                    }
                    render() {
                        console.log("render...");
                        let {message}= this.state;
                         return (
                            <div>
                                <h3>{message}</h3>
                                <input   type="text" 
                                onChange={}
                                 value={message}/>
                                 <button onClick={()=>{}}>提交</button>
                            </div>
                         );
                    }
                }
    

    4. 输入框逻辑

    输入框输入值 界面跟随更改
    也就是输入框绑定事件 onChange或者onInput事件,在事件中 修改 message的值


    4.1 事件代码

    基础的js 事件参数传值 获取事件对象

       // -----自定义函数
                    changeHandle(ev){
                        console.log(ev.target.value);
                        this.setState({
                            message:ev.target.value
                        })
                    }
    

    4.2 输入框代码

    <input  ref="myMessage" type="text" 
                                onChange={this.changeHandle.bind(this)}
                                 value={message}/>
    

    5. 提交按钮

    提交的时候需要获取到 输入框内容
    获取DOMvue 类似 通过 ref属性
    但是 使用的时候 this.refs 没有$

     <input  ref="myMessage" type="text" 
                                onChange={this.changeHandle.bind(this)}
                                 value={message}/>
    <button onClick={()=>{
                                    //  this.state.message 
                                    // 注意没有$
                                    // this.refs.myMessage DOM对象
                                    // 和defaultValue一起用就不不需要 双向绑定了
                                     console.log(this.refs.myMessage.value);
                                 }}>提交</button>
    

    6. 简洁写法 ref

    1.ref 绑定监听函数,默认参数就是当前的标签对象
    2.也就是说el就是当前这个 input标签对象

         <input  ref={el=>this.msgInput= el} 
                   value={message } onChange={(event)=>{
                            this.setState({
                                message :this.msgInput.value
                            })
                        }}/>
    
    <button  onClick={()=>{
                           console.log("获取 ref",this.msgInput.value);
                        }}> 提交</button>
    

    7. react 和 vue 简单对比

    vue

    v-model 是双向数据绑定
    状态修改 ---> 界面
    界面修改 ---> 状态


    react

    没有双向绑定,只有单向数据传递
    状态 ---> 界面
    界面 ---> 状态 react没有实现,我们可以在inputonChange中通过修改inputvaule值,来修改状态


    参考资料

    对比其他框架


    初心

    我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理;如有错误,欢迎交流;
    如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
    共勉

    相关文章

      网友评论

          本文标题:react-12-单向数据流-ref-双向绑定的实现

          本文链接:https://www.haomeiwen.com/subject/yidvmltx.html