zoukankan      html  css  js  c++  java
  • vue3.0中reactive的正确使用姿势

    场景

    在项目开发的时候,前端肯定是先写静态页面
    在静态页面写好之后
    然后就可以与后端对接数据了【高兴】
    但是在对接接口的时候
    我们会发现后端返回来的字段与前端在页面上写的可能不一致
    这个时候有意思的事情就发生了
    

    这种情况数据是不会跟新的

    <div>
        {{ objData }}
        <button @click="submitHander">改变数据</button>
    </div>
    
    <script>
    import { reactive } from 'vue'
    export default {
        setup () {
            let objData=reactive({
                    name:'林漾',
                    age:31,
                    sex:'女'
            })
            //这样的方式跟新失败
            function   submitHander(){
                objData={
                    name:'林漾1',
                    age:31,
                    sex:'女nv'	
               }
            }
            return {
                objData,
                submitHander
            }
        }
    }
    </script>
    

    发生的现象

     想必各位都发现, 点击按钮的时候,
     数据始终没有发生改变
     为什么数据没有发生改变了?
     因为我点击的时候是这样操作的
     objData={
            name:'林漾1',
            age:31,
            sex:'女nv'	
       }
     我是重新赋值的。如果你赋值是整个对象,vue3.0是无法跟新的
     如何要跟新怎么处理
    

    这样可以跟新

    <template>
    	<div>
    		{{ objData }}
    		<button @click="submitHander">改变数据</button>
    	</div>
    </template>
    
    <script>
    import { reactive } from 'vue'
    export default {
        setup () {
            let objData=reactive({
                name:'林漾',
                age:31,
                sex:'女'
            })
            function	submitHander(){
                objData.name='林漾1';
                objData.name='31';
                objData.name='女nv';
            }
            return {
                objData,
                submitHander
            }
        }
    }
    </script>
    

    上面跟新遇见的问题

    如何有很多值。如果需要我去跟新,
    那岂不是我要一个一个的去参与赋值,
    这样的话岂不是要把我累死???【妈呀!接受不了】
    也有办法去解决:如何处理呢??
    其实上面reactive的是使用方式都错了。真的错了,我骗你
    

    reactive 如何正确去跟新

    <template>
        <div>
            {{ objData.arr }}
            <button @click="submitHander">改变数据</button>
        </div>
    </template>
    
    <script>
    import { reactive } from 'vue'
    export default {
        setup () {
            let objData=reactive({
                // reactive下面应该放置一个属性值
                arr:[
                        {
                            name:'林漾',
                            age:31,
                            sex:'女'
                        }
                ]
            });
            function submitHander(){
                objData.arr=[
                    {   name:'余声声',
                        age:29,
                        sex:'女'
                    }
                ]
            }
            return {
                objData,
                submitHander
            }
        }
    }
    </script>
    

    reactive 正确使用姿势

     reactive函数传递的参数必须是对象(json/arr)
     千万不要这样写 
     let objData=reactive({ name:'林漾', age:31, sex:'女' })
     这样写是非常的不好的。
     
     有的小伙伴可能会说:
     上面reactive函数传递的参数是对象呀
     有什么问题了???
     问题是在我们跟新数据的时候一点都不友好
     
     还有就是我们在实际开发过程中可能有好几处都是响应式的数据
     这个时候我们只需要创建一个reactive
     就说按照下面这样来处理
     let objData=reactive({
        // 某一个区域使用的数据
        oneObj:[
                {
                        name:'林漾',
                        age:31,
                        sex:'女'
                }
        ],
        // 另一个区域使用的数据
        two:{
                name:'余声声',
                age:123
        }
    });
    
    
    不推荐这样使用
    let oneObj=reactive({
            name:'林漾',
            age:31,
            sex:'女'
    })
    
    let two=reactive({
            name:'余声声',
            age:123
    })
    
    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    dos下 批处理 用 pause 可以在最后暂停 查看结果信息 build.bat
    flash jquery 调用摄像头 vue chrome49浏览器
    pandownload 百度网盘 下载
    webpack安装包的时候 1程序目录不要在C盘 2路径不要有中文 3用cnpm
    import * as tools from '@/libs/tools' 导入组件的时候 如果里面都是单独导入的,可以用 *加as起个别名使用
    markdown test
    谷歌浏览器 加安全地址 快捷方式加参数 chrome
    vue validate多表单验证思考 之前写过一个里外层,现在觉得不合适,应该平行的写,然后都给ret,最后判断ret 再做出反应,这样整体表单的所有验证就都报验证,然后最后提交的时候把组件内的对象合并到总的对象,再提交
    js引入的数组 会被页面缓存,如需要被强制性不缓存,请用function return 就ok了
    FiraCode 字体 => 箭头函数变成 整体 还有 等于 不等于
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15096750.html
Copyright © 2011-2022 走看看