Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)

 Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它专门设计用于Web应用程序,并专注于视图层。Vue允许开发人员创建可重用的组件,并轻松管理状态和数据绑定。它还提供了一个虚拟DOM系统,用于高效地渲染和重新渲染组件。Vue以其简单易用的特点而闻名,使其成为初学者和有经验的开发人员的首选。

使用以下方法构建版本

 下载 vue.esm-browser.js 这个模块文件

 使用了<script type="module">,且导入了上面的js文件(详细点击这里)

<div id="app">{{ msg }}</div>

<!-- ES6基准新的特性,支持类似Python的模板开发方式 -->
<script type="module">
  import { createApp } from "../vue.esm-browser.js"
  
  createApp({
    data() {
      return {
        msg: 'Hello Vue!'
      }
    }
  }).mount('#app')
</script>

一、创建一个 Vue 应用程序

 每个 Vue 应用都是通过 createApp 函数创建一个新的应用实例

<script type="module">  
        import { createApp } from "../vue.esm-browser.js" 
        //​通过 createApp 函数创建一个新的应用实例
        createApp({

            })

应用实例必须在调用了.mount() 方法后才会渲染出来,该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串,createApp 里面的内容将会被渲染在容器元素里面

<div id="app"> </div>

<!-- ES6基准新的特性,支持类似Python的模板开发方式 -->
<script type="module">
  import { createApp } from "../vue.esm-browser.js"
  
  createApp({

     }).mount('#app'); //将 Vue 应用程序挂载(mount) 到 app 元素上

</script>

然后手写一个setup函数, 用于设置组件的响应式"数据(属性)"和"函数(方法)"等

创建一个Vue实例,并利用setup函数配置好这个实例里的数据和方法,并将需要用到的数据和方法暴露出来,供HTML调用。

<div id="app">
       
</div>

<script type="module">
  import { createApp } from "../vue.esm-browser.js"
  
  createApp({
    setup(){
                // 定义数据(属性)
                let msg = "成功创建第一个Vue应用程序!";

                const web = {
                    title: "百度一下,你就知道",
                    url: "www.baidu.com"
                }

                // 定义函数(方法)
                const func = ()=> console.log("方法func被调用");
                

                // 返回一个对象类型的数据
                return { msg,   
                         web,
                         func
                 }
            }
  }).mount('#app'); 

</script>

 {{  }} 插值表达式, 可以将 Vue 实例中定义的数据在视图中进行渲染 

<div id="app">
        <!-- 如: Vue 实例中定义一个 msg 变量, 值为 "成功创建第一个Vue应用程序!", 
        在模板中若使用插值表达式 {{ msg }} 则会被渲染成 "成功创建第一个Vue应用程序!" -->
        <p>{{ msg }}</p>
        <p>{{ web.title }}</p>
        <p>{{ web.url }}</p>
        <p>{{ func() }}</p>
</div>

<script type="module">
  import { createApp } from "../vue.esm-browser.js"
  
  createApp({
    setup(){
                // 定义数据(属性)
                let msg = "成功创建第一个Vue应用程序!";

                const web = {
                    title: "百度一下,你就知道",
                    url: "www.baidu.com"
                }

                // 定义函数(方法)
                const func = ()=> console.log("方法func被调用");
                

                // 返回一个对象类型的数据
                return { msg,   
                         web,
                         func
                 }
            }
  }).mount('#app'); 

</script>

 接下来需要下载一个live-server插件,我们可以在项目中实时用live-server作为一个实时服务器实时查看开发的网页或项目效果。(实现自动刷新,架设本地服务器环境)

二、让数据变成响应式 ref 和 reactive

在Vue 3中,非响应式数据,在模板中普通变量不会自动更新,我们可以使用 ref reactive 函数来将数据变成响应式。

1、ref 函数:可以将基本类型数据包装成响应式对象

//使用 {{  }} 插值表达式, 将 Vue 实例中定义的数据在视图中进行渲染
<div id="app">
        <p>{{ msg }}</p>
</div>
<script type="module">  
//导入 ref
    import {createApp, ref} from "../vue.esm-browser.js"
    createApp({

                setup(){
                    // 定义数据

                    let msg = ref("成功创建第一个Vue应用程序!");

                    // 返回一个对象类型的数据
                    return { msg, 
                    }
            }

         }).mount("#app");
</script>

在上面的例子中,使用 ref 函数将 "成功创建第一个Vue应用程序!" 包装成响应式对象 msg,然后使用 {{  }} 插值表达式, 将 Vue 实例中定义的数据在视图中进行渲染

 2、reactive 函数:可以将对象或数组转换成响应式对象。

//使用 {{  }} 插值表达式, 将 Vue 实例中定义的数据在视图中进行渲染
<div id="app">
        <p>{{ web.title }}</p>
        <p>{{ web.url }}</p>
</div>
<script type="module">  
//导入 ref
    import {createApp, reactive} from "../vue.esm-browser.js"
    createApp({

                setup(){
                    // 定义数据

                    const web = reactive(
                        {
                            title: "百度一下,你就知道",
                            url: "www.baidu.com"
                        }
                    );

                    // 返回一个对象类型的数据
                    return { web, 
                    }
            }

         }).mount("#app");
</script>

在上面的例子中,我们使用 reactive 函数将包含 title 和 url 属性的对象转换成响应式对象 web。我们可以直接访问和修改 web 中的属性。

ref 和 reactive 函数的不同之处在于,ref 返回的是一个包装对象,我们需要使用 .value 来访问和修改数据。而 reactive 返回的是一个原始对象,我们可以直接访问和修改其中的属性。

无论是 ref 还是 reactive,当数据发生变化时,相应的视图也会自动更新。这使得我们能够轻松地实现数据的响应性。

三、事件绑定指令 v-on

在Vue中,可以使用 v-on 指令来绑定事件处理函数。

v-on指令可以简写为@,使用方式如下:

        <!-- v-on:click 表示在 button 元素上监听 click 事件 -->
        <button v-on:click="edit">修改</button> <br>
    
        <!-- @click 简写形式 -->
        <button @click="edit">修改</button>

上面的代码将 edit 方法绑定到 click 事件上。当按钮被点击时,edit 方法将被执行。


事件处理函数可以是一个直接的方法引用,也可以是一个内联函数。例如:


    <div id="app">
        <h3>{{ web.user }}</h3>
    
        <!-- @click 简写形式 -->
        <button @click="add(20, 30)">加法</button> <br>
    
    </div>

    <script type="module">
        import { createApp, reactive, ref } from './vue.esm-browser.js'
        
        createApp({
            setup() {

                const web = reactive({
                    user: 0
                });
    
                const add = (a, b) => {
                    web.user += a + b
                }
    
                return {
                    web,//响应式数据
                    add,//方法
                }
            }
        }).mount("#app")
    
    </script>

 在上面的例子中,将 add 方法绑定到 click 事件上,我们通过传递 "20" 和 "30" 来调用 add 方法修改web中的user属性,并使用 {{  }} 插值表达式, 将 Vue 实例中定义的数据在视图中进行渲染


除了click事件,v-on 指令还可以绑定其他DOM事件,如keyup、keydown等(点击这里了解DOM事件) 。例如:

        <!-- 
            enter space tab 按键修饰符
            keyup是在用户松开按键时才触发
            keydown是在用户按下按键时立即触发
        -->        
        回车 <input type="text" @keyup.enter="add(40, 60)"> <br>
        空格 <input type="text" @keyup.space="add(20, 30)"> <br>
        Tab <input type="text" @keydown.tab="add(10, 20)"> <br>
        w <input type="text" @keyup.w="add(5, 10)"> <br>

 例如上面的代码将add方法绑定到keyup.enter事件上,当用户按下回车键时,add方法将被执行。

四、条件渲染指令 v-show 和 v-if

条件渲染指令在Vue.js中用于控制元素的显示或隐藏,它们分别是v-showv-if

v-show指令根据其后表达式的真假值来控制元素的显示与隐藏。它通过修改元素的display:none实现隐藏的,当表达式为真时,元素显示,为假时,元素隐藏。例如:
    <div id="app">


        <h3>显示状态: {{ web.show }}</h3>
        <!-- Vue处理v-show变化时,是用display:none实现隐藏的(可以通过F12检查源代码,当点击时,源码会加入display:none) -->
        <p v-show="web.show">广东云浮中医药职业学院计算机学院v-show</p>   
        
    </div>

    <script type="module">
        import { createApp, reactive, ref } from './vue.esm-browser.js'
        
        createApp({
        setup() {
                const web = reactive({   // 响应式数据
                    show: true, //真
                });

                return {
                    web,
                }
            }
        }).mount("#app");
    
    </script>

上面的代码将根据web中show属性的值来显示或隐藏<p>元素 


v-if指令是真正地条件渲染。当表达式为真时,元素会被渲染到DOM中,为假时,元素会被移除。 例如:
    <div id="app">


        <h3>显示状态: {{ web.show }}</h3>
        <!-- Vue处理v-if变化时,是通过删除节点实现隐藏的(可以通过F12检查源代码,当点击时,源码会删除节点) 。
         当遇到需要频繁显示和隐藏的场景时,不是合使用v-if, 因为频繁增删节点,会导致渲染效率下降 -->
        <p v-if="web.show">广东云浮中医药职业学院基础学院v-if</p>
        <button @click="toggle">切换显示状态</button>

    </div>

    <script type="module">
        import { createApp, reactive, ref } from './vue.esm-browser.js'
        
        createApp({
        setup() {
                const web = reactive({   // 响应式数据
                    show: true
                });

                const toggle = () => {
                    web.show = !web.show;   // 这个布尔变量被切换后,模板中用到的地方会自动更新,进而被v-show捕获
                }
                return {
                    web,
                    toggle
                }
            }
        }).mount("#app");
    
    </script>

 上面的代码定义了一个toggle 方法将其绑定到 click 事件上,当按钮被点击时,toggle 方法将被执行。改变web中show属性的布尔变量,根据web中show属性的值来渲染或移除<p>元素

v-if 是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建。

相比之下,v-show 简单许多,元素无论初始条件如何,始终会被渲染,只有 CSS display 属性会被切换。

总的来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要频繁切换,则使用 v-show 较好;如果在运行时绑定条件很少改变,则 v-if 会更合适。


在使用 v-if 时,还可以通过使用 v-else-if v-else 指令来实现条件分支。

例如: (当用户数量小于100为新网站;用户数量大于等于100,小于1000为优秀网站;用户数量大于等于1000,小于10000为资深网站;否则为超级网站)

    <div id="app">
        <h3>{{ web.user }}</h3>
        <p v-if="web.user < 100">新网站</p>
        <p v-else-if="web.user >= 100 && web.user < 1000">优秀网站</p>
        <p v-else-if="web.user >= 1000 && web.user < 10000">资深网站</p>
        <p v-else>超级网站</p>
        <button @click="add_user">增加用户</button>
        
    </div>

    <script type="module">
        import { createApp, reactive, ref } from './vue.esm-browser.js'
        
        createApp({
        setup() {
                const web = reactive({   // 响应式数据
                    user: 50  //初始用户为50
                });

                const add_user = () => {
                    web.user += 1000;
                }

                return {
                    web,
                    add_user
                }
            }
        }).mount("#app");
    
    </script>

上面的代码展示了如何使用 v-else-if 和 v-else 来创建条件分支。根据不同的条件,会显示不同的内容。 

五、遍历指令 v-for

在Vue中,使用 v-for 指令可以遍历数组或对象,根据每个元素生成相应的元素或组件。它用于数组或者对象的迭代,帮助开发者轻松地将数据渲染成列表或重复结构。

它的基本语法如下:

    <div id="app">
        <!-- 遍历对象的值 -->
        <h4>实验1:遍历对象的值</h4>

        <p v-for="value in data.user"> 
            {{value}} 
        </p>
    </div>

    <script type="module">

        import { createApp, reactive } from '../vue.esm-browser.js'
    
        createApp({
        setup() {
                const data = reactive({
                    //数组
                    number: ["十",  "十一",  "十二"], 
                    //对象
                    user: { name: "李雷",   gender: "女",  class:1}
                });

                return {
                    data
                }
            }
        }).mount("#app")


    </script>

其中,data.user是data中的user属性(对象),value是对象中的每个值 


除了对对象的值进行遍历,v-for还支持对对象、数组的值、索引和键进行遍历,以及迭代数字。下面是一些示例: 

遍历对象的值和索引(先值后索引):

        <!-- 遍历对象的值和索引。 注意:写指令时,先值后索引 -->
        <h4>实验2:遍历对象的值和索引(键)。 注意:写指令时,先值后索引</h4>
        <p v-for="(value, key) in data.user"> 
            {{key}} : {{value}} 
        </p>

 遍历数组的值和索引(先值后索引):

        <!-- 遍历数组的值和索引。 注意:写指令时,先值后索引 -->
        <h4>实验3:遍历数组的值和索引。 注意:写指令时,先值后索引</h4>
        <p v-for="(v, i) in data.number"> 
            {{i}} : {{v}} 
        </p>

 上面代码中值和索引的名字可改变,但要一定注意的是写指令时,先值后索引

 遍历对象的值、键和索引(先值再键后索引):

        <!-- 遍历对象的值,键和索引。 注意:写指令时,先值再键后索引 -->
        <h4>实验4:遍历对象的值,键和索引。 注意:写指令时,先值再键后索引</h4>
        <p v-for="(v, k, i) in data.user"> 
            {{i}} : {{k}}: {{v}} 
        </p>

 遍历数字: 

        <ul>
            <li v-for="n in 10">{{ n }}</li>
        </ul>

 总结起来,v-for指令用于在Vue.js模板中进行循环遍历,可以对数组、对象和数字进行遍历 

六、节点的动态属性 v-bind (单向绑定)

v-bind是Vue.js的指令之一,用于动态地绑定节点的属性。它可以将Vue实例的数据或计算属性绑定到节点的属性上,实现单向绑定。

v-bind的基本语法是在属性名前加上 v-bind: 或简写为 : ,后面跟上要绑定的表达式。例如:

input标签动态属性绑定

    <div id="app">

        <h3>  实验1:input标签动态属性绑定    v-bind:value </h3>
        <input type="text" v-bind:value="web.str">
        <!-- 简写形式: <input type="text" :value="web.str"> -->

    </div>

    <script type="module">
        import { createApp, reactive } from '../vue.esm-browser.js'
    
        createApp({
            setup() {
                const web = reactive({
                    str: "www.baidu.com"
                })

                return {
                    web
                }
            }
        }).mount("#app")
    </script>

上面的代码中,:value 是 v-bind:value 的简写形式,web.str 是一个Vue实例的数据或属性,它会在渲染时被动态地绑定到 <input> 节点的 value 属性上。


 img标签动态属性绑定

    <div id="app">

        <h3>  实验2: img标签动态属性绑定</h3>
        <img v-bind:src="web.img">

    </div>

    <script type="module">
        import { createApp, reactive } from '../vue.esm-browser.js'
    
        createApp({
            setup() {
                const web = reactive({
                    img: "../img_src/logo0.png"
                })

                return {
                    web
                }
            }
        }).mount("#app")
    </script>

上面的代码中,web.img 是一个Vue实例的数据或属性,它会在渲染时被动态地绑定到<img>节点的src属性上。


控制HTML标签的class中某个值是否存在

除了绑定属性值,v-bind还可以绑定动态的CSS类和内联样式。例如:

 控制HTML标签的class中某个值是否存在使用 v-bind:class或 v-bind:id(通过布尔值控制该类名是否存在,进而控制CSS样式是否被选择生效)

<head>
    <style>
        .textColor{
            color: red;
            font-size: larger;
        }
    </style>
</head>

<body>
    <div id="app">

        <b v-bind:class="{textColor:web.fontStatus}"  id="b1">广东云浮中医药职业学院</b>

        <br><br><br>
        <button v-on:click="change">修改</button>

    </div>

    <script type="module">
        import { createApp, reactive } from '../vue.esm-browser.js'
    
        createApp({
            setup() {
                const web = reactive({
                    fontStatus: false
                })

                const change = () => {
                    web.fontStatus = !web.fontStatus; //修改布尔变量
                }
    
                return {
                    web,
                    change
                }
            }
        }).mount("#app")
    </script>

</body>

上面的代码中,web.fontStatus 是Vue实例的数据或计算属性,根据它的布尔值来动态地控制CSS样式是否被选择生效。 fontStatus的初始值为false,所以不生效。定义了一个change方法来修改布尔变量,将 change方法绑定到 click 事件上。当按钮被点击时,change方法将被执行,此时fontStatus 的值变为true,textColor的CSS样式就被选择生效。

需要注意的是,v-bind实现的是单向绑定,也就是数据变化会导致视图更新,但视图更新不会反过来改变数据。如果需要实现双向绑定,则应该使用v-model指令。

综上所述,v-bind指令用于动态绑定节点的属性,可以绑定属性值、CSS类和内联样式。它通过将Vue实例的数据或计算属性与节点属性进行绑定,实现数据的单向绑定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive基础面试-如何理解复用率的

1. 模型的复用率你们是怎么做的&#xff1f; 简单直白的说就是你的模型复用率如何&#xff0c;在业务方是否认可该模型&#xff0c;也是衡量模型建设的一个标准&#xff0c;复用率数&#xff1a;数仓模型涉及的核心是追求模型的复用和共享&#xff0c;引用系数越高&#xff0c;…

Excel - VLOOKUP函数将指定列替换为字典值

背景&#xff1a;在根据各种复杂的口径导出报表数据时&#xff0c;因为关联的表较多、数据量较大&#xff0c;一行数据往往会存在三个以上的字典数据。 为了保证导出数据的效率&#xff0c;博主选择了导出字典code值后&#xff0c;在Excel中处理匹配字典值。在查询百度之后&am…

鸿蒙学习笔记:初探UI开发

介绍了ArkUI相关内容&#xff0c;涵盖其基本概念&#xff0c;如组件、页面及二者作用。阐述了ArkUI主要特征&#xff0c;包括多态组件、多样布局等多方面能力。还讲解了声明式、类Web两种开发范式及适用场景。声明式开发范式从多维度提供UI能力&#xff0c;介绍了其基础能力、整…

OceanBase Shell开放内核运维接口,运维更便捷

DBA在日常业务中面临着繁琐的运维管理任务&#xff0c;亟需高效的工具和灵活的解决方案帮助他们简化操作、提升效率。因此&#xff0c;命令行操作和维护工具&#xff08;CLI工具&#xff09;&#xff0c;因其高效、灵活、可远程管理以及技术深度等特点&#xff0c;成为DBA和开发…

springboot配置https,并使用wss

学习链接 springboot如何将http转https 可借鉴的参考&#xff1a; springboot如何配置ssl支持httpsSpringBoot配置HTTPS及开发调试的操作方法springboot实现的https单向认证和双向认证(java生成证书)SpringBoot配置Https访问的详细步骤SpringBoot配置Https入门实践springboo…

高精度计算题目合集

高精度计算题目合集 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 高精度加法原理&#xff1a; a&#xff0c;b&#xff0c;c 都可以用数组表示。这些都是基于c语言的算术运算符形成的运算。 c 3 ( c 1 c 2 ) % 10 c_3(c_1c_2)\%1…

Javaweb前端HTML css 整体布局

最后一个是线条颜色 盒子&#xff0c;整体还是300&#xff0c;400

测试人员--如何区分前端BUG和后端BUG

在软件测试中&#xff0c;发现一个BUG并不算难&#xff0c;但准确定位它的来源却常常让测试人员头疼。是前端页面的问题&#xff1f;还是后台服务的异常&#xff1f;如果搞错了方向&#xff0c;开发人员之间的沟通效率会大大降低&#xff0c;甚至导致问题久拖不决。 那么&#…

嵌入式:Flash的分类以及Jlink/J-flash的编程支持

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 常见的Flash大致可以分为以下大类&#xff1a; Serial Nor FlashSerial Nand FlashParallel Nor FlashParallel Nand FlashSerial EEPROM Serial Nor Flash 介绍 Se…

【Linux系统编程】第五十弹---构建高效单例模式线程池、详解线程安全与可重入性、解析死锁与避免策略,以及STL与智能指针的线程安全性探究

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、将日志加到线程池 1.1、Thread类 1.2、ThreadPool类 1.2.1、HandlerTask() 1.2.2、其他公有成员函数 1.3、主函数 2、…

基于SSM的作业批改系统+LW示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;学生管理、教师管理、作业信息管理、作业提交管理、作业批改管理等&#xff09;、学生&#xff08;个人信息管理、作业提交、作业查看等&#xff09;、教师&#xff08;个人中心、作业创建、作业批改等&#xff09;技术选型…

RabbitMQ高可用延迟消息惰性队列

目录 生产者确认 消息持久化 消费者确认 TTL延迟队列 TTL延迟消息 惰性队列 生产者确认 生产者确认就是&#xff1a;发送消息的人&#xff0c;要确保消息发送给了消息队列&#xff0c;分别是确保到了交换机&#xff0c;确保到了消息队列这两步。 1、在发送消息服务的ap…

嵌入式面试八股文(十)·RS485特性分析、CAN硬件同步和再同步遵从规则、SPI四种工作模式、错误帧基本概念

目录 1. 相较于传统的RS232接口&#xff0c;RS485的接口特性有哪些&#xff1f; 2. 在CAN接口协议中硬件同步和再同步需要遵从哪些规则&#xff1f; 3. 为什么位错误不能用于帧间隔&#xff1f; 4. SPI四种工作模式&#xff1f; 5. 关于错误帧&#xff0c;基本概念&a…

librdns一个开源DNS解析库

原文地址&#xff1a;librdns一个开源DNS解析库 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 介绍 librdns是一个开源的异步多功能插件式的解析器&#xff0c;用于DNS解析。 源代码地址&#xff1a;GitHub - vstakhov/librdns: Asynchrono…

cookie反爬----普通服务器,阿里系

目录 一.常见COOKIE反爬 普通&#xff1a; 1. 简介 2. 加密原理 二.实战案例 1. 服务器响应cookie信息 1. 逆向目标 2. 逆向分析 2. 阿里系cookie逆向 1. 逆向目标 2. 逆向分析 实战&#xff1a; 无限debugger原理 1. Function("debugger").call() 2. …

大数据新视界 -- 大数据大厂之 Impala 性能优化:跨数据中心环境下的挑战与对策(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

width设置100vh但出现横向滚动条的问题

在去做flex左右固定,中间自适应宽度的布局时, 发现这样一个问题: 就是我明明是宽度占据整个视口, 但是却多出了横向的滚动条 效果是这样的 把width改成100%,就没有滚动条了 原因: body是有默认样式的, 会有一定的默认边距, 把默认边距清除就是正常的了 同时, 如果把高度设…

百度在下一盘大棋

这两天世界互联网大会在乌镇又召开了。 我看到一条新闻&#xff0c;今年世界互联网大会乌镇峰会发布“2024 年度中国互联网企业创新发展十大典型案例”&#xff0c;百度文心智能体平台入选。 这个智能体平台我最近也有所关注&#xff0c;接下来我就来讲讲它。 百度在下一盘大棋…

探索 RocketMQ:企业级消息中间件的选择与应用

一、关于RocketMQ RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件&#xff0c;它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递&#xff0c;它是一个轻量级的、功能强大的消息队列系统&…

Android 基于Camera2 API进行摄像机图像预览

前言 近期博主准备编写一个基于Android Camera2的图像采集并编码为h.264的应用&#xff0c;准备分为三个阶段来完成&#xff0c;第一阶段实现Camera2的摄像机预览&#xff0c;第二阶段完成基于MediaCodec H.264编码&#xff0c;第三阶段完成基于MediaCodec H.264解码,针对不同…