Vue——day07之条件渲染、列表渲染以及监测数据

news2024/9/20 0:25:20

目录

1.template标签

2.条件渲染

3.列表渲染

4.v-for中的key的作用以及原理

5.列表过滤

placeholder

前端空字符串

使用数据监视watch实现

使用计算属性实现

6.列表排序

7.Vue更新数据检测失败

原因

总结



1.template标签

        template标签是Vue.js中的一个特殊元素,它的作用是在渲染过程中作为一个容器,可以承载多个子元素,但不会在最终渲染的DOM中显示。它是Vue.js提供的一种逻辑组织的方式。

template标签可以用来:

  1. 组织代码:当需要在一个组件或者模板中定义多个子元素时,可以使用template标签将它们包裹起来,提高代码的可读性和组织结构。

  2. 条件渲染:template标签可以作为条件渲染的容器,根据条件展示不同的内容。

  3. 循环渲染:template标签可以配合v-for指令,循环渲染一段代码片段多次。

  4. 提高性能:当组件需要有多个根元素时,可以使用template标签作为一个根元素的容器,避免在渲染的DOM中增加额外的层级。

        总之,template标签在Vue.js中起到了一个逻辑组织和代码承载的作用,可以提高代码的可读性和组织结构,并且在渲染过程中不会在最终的DOM中显示。


2.条件渲染

在Vue中,条件渲染是指根据某个条件来决定是否渲染或展示某个元素或组件。Vue提供了两种常用的条件渲染指令:v-show和v-if。

  1. v-show: v-show是一种基于CSS的条件渲染指令。使用v-show时,元素会始终渲染在DOM中,只是通过CSS的display属性来控制元素的显示和隐藏。

示例:

<div v-show="isVisible">This is a visible element</div>

在上述示例中,当isVisibletrue时,元素会显示出来;当isVisiblefalse时,元素会隐藏起来。

v-show适用于需要频繁切换元素的显示和隐藏的场景,因为元素始终存在于DOM中,切换过程更加高效。

  1. v-if: v-if是一种基于DOM的条件渲染指令。使用v-if时,元素会在条件为true时渲染到DOM中,条件为false时,元素会从DOM中移除。

示例:

<div v-if="isVisible">This is a visible element</div>

在上述示例中,当isVisibletrue时,元素会被渲染到DOM中;当isVisiblefalse时,元素会从DOM中移除。

v-if适用于切换频率较低的场景,因为每次条件变化时,DOM的创建和销毁会有额外的性能开销。

可以使用v-else-if和v-else来串联多个条件。

示例:

<div v-if="condition1">Condition 1 is true</div>
<div v-else-if="condition2">Condition 2 is true</div>
<div v-else>Neither condition is true</div>

在上述示例中,根据条件的不同,会根据条件渲染不同的元素。

总结: v-show通过CSS的display属性控制元素的显示和隐藏,适用于切换频率较高的场景; v-if通过DOM的创建和销毁来控制元素的显示和隐藏,适用于切换频率较低的场景。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n加一</button>
        <button @click="n--">点我n减一</button>
        <!-- 使用v-show作条件渲染 -->
        <!-- v-show="true":这里为true的时候显示,false的时候不显示 -->
        <h1 v-show="false">欢迎来到{{name}}的博客</h1>
        <h1 v-show="1 === 3">欢迎来到{{name}}的博客</h1>
        <h1 v-show="isTrue">欢迎来到{{name}}的博客</h1>

        <br>
        <hr>
        <br>
        <!-- 使用v-if作条件渲染 -->
        <h1 v-if="false">欢迎来到{{name}}的博客</h1>
        <h1 v-if="1 === 1">欢迎来到{{name}}的博客</h1>

        <br>
        <hr>
        <br>
        <!-- 切换比较频繁的时候实用v-show -->
        <div v-show="n === 1">机器学习</div>
        <div v-show="n === 2">深度学习</div>
        <div v-show="n === 3">人工智能</div>
        <hr>
        <!-- 
        v-else和v-else-if
        这几个div要紧紧的连接在一起,中间不能被打断 
        -->
        <div v-if="n === 1">机器学习</div>
        <div v-else-if="n === 2">深度学习</div>
        <div v-else-if="n === 3">人工智能</div>
        <div v-else>哦也</div>


        <br>
        <hr>
        <br>
        <!-- 使用此标签可以不修改DOM结构 -->
         <!-- 但是只能和v-if配合使用,不能和v-show配合使用 -->
        <template v-if="n === 1">
            <h2>你好</h2>
            <h2>CSDN</h2>
            <h2>成都</h2>
        </template>
    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false
    const vm = new Vue({
        el:'#root',
        data:{
            name:'WenJGo',
            isTrue:false,
            n:0
        }
    });
</script>
</html>

页面效果如下图所示:


3.列表渲染

在Vue中,列表渲染是一种常用的功能,用于根据数组或对象的数据生成对应的列表。Vue提供了v-for指令来实现列表渲染。

使用v-for指令,可以通过遍历数组或对象的方式,将每个元素都渲染为对应的DOM元素。

  1. 遍历数组: 例如,有一个名为items的数组,我们可以使用v-for指令来遍历它并渲染为列表:
<ul>
  <li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>

在上述示例中,v-for="item in items"表示遍历items数组,使用item来表示每个数组元素。:key="item.id"是为了给每个列表项提供唯一的标识符,用于优化性能。{{ item.name }}表示渲染每个数组元素的name属性。

  1. 遍历对象: 除了遍历数组,我们也可以使用v-for指令来遍历对象的属性。
<ul>
  <li v-for="(value, key) in obj" :key="key">{{ key }}: {{ value }}</li>
</ul>

在上述示例中,(value, key) in obj表示遍历obj对象的属性,使用valuekey来表示每个属性的值和键。:key="key"用于提供唯一的标识符。{{ key }}: {{ value }}表示渲染每个属性的键和值。

另外,v-for指令还提供了索引值index,可以在遍历过程中使用。

<ul>
  <li v-for="(item, index) in items" :key="item.id">{{ index }} - {{ item.name }}</li>
</ul>

在上述示例中,index表示当前数组元素的索引值。

总结: 通过v-for指令,我们可以方便地遍历数组和对象,将它们渲染为对应的列表。在处理列表渲染时,我们还可以使用:key来提供唯一的标识符,优化性能。

总体示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>人员列表</h2>
        <!-- 遍历数组 -->
        <ul>
            <!-- :key="per.id"让每一个li都有唯一的标识 -->
            <!-- <li v-for="per in personList" :key="per.id"> -->
            <li v-for="(per,index) in personList" :key="index">
                {{index}}==>{{per.name}}-{{per.age}}
            </li>
        </ul>
        <br>
        <hr>
        <br>
        <!-- 遍历对象 -->
        <h2>汽车信息</h2>
        <ul>
            <li v-for="(value,key) in car" :key="key">
                {{key}}:{{value}}
            </li>
        </ul>

        <br>
        <hr>
        <br>
        <!-- 下面的都用得少 -->
        <!-- 遍历字符串 -->
        <h2>字符串信息</h2>
        <ul>
            <li v-for="(char,index) in str" :key="key">
                {{index}}:{{char}}
            </li>
        </ul>


        <br>
        <hr>
        <br>
        <!-- 遍历指定次数 -->
        <h2>遍历指定次数</h2>
        <ul>
            <li v-for="(times,index) in 5" :key="index" >
                {{index}}:{{times}}
            </li>
        </ul>

    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false
    new Vue({
        el:'#root',
        data:{
            // 数组类型
            personList:[
                {id:'001',name:'张三',age:18},
                {id:'002',name:'李四',age:28},
                {id:'003',name:'王五',age:22}
            ],
            // 对象类型
            car:{
                name:'红旗',
                price:'1000万',
                color:'黑色'
            },
            // 字符串类型
            str:'hello'
        }
    });
</script>
</html>


4.v-for中的key的作用以及原理

        在使用Vue的v-for指令时,可以通过key属性为每个列表项提供一个唯一的标识符。这个key的作用是为Vue跟踪每个列表项的身份,以便在重新渲染列表时,能够高效地更新和重用已有的DOM元素。

        当Vue进行列表渲染时,会根据列表数据生成一组对应的DOM元素。当数据发生变化,比如列表项的顺序发生变化、某个列表项被添加或删除时,Vue会基于新的数据重新渲染DOM。这时,Vue会根据每个列表项的key属性来判断该项是否需要重新渲染。

具体原理如下:

  1. Vue会根据key属性对每个列表项进行标记,并创建一个列表项到key的映射关系。

  2. 当数据变化时,Vue会根据新的数据重新计算列表项的顺序。

  3. Vue会比较新的列表项顺序和旧的映射关系,找出需要被移动、添加或删除的列表项。

  4. 对于需要被移动的列表项,Vue会将其从旧的位置移动到新的位置,而不是销毁和重新创建。

  5. 对于需要被添加的列表项,Vue会根据key属性查找到对应的旧的DOM元素,如果找到了,就将其移动到正确的位置;如果没有找到,才会创建新的DOM元素。

  6. 对于需要被删除的列表项,Vue会将其从DOM中移除,并在内部进行一些清理工作。

        通过使用key属性,Vue能够在列表项发生变化时,快速识别出需要做哪些DOM操作,从而提高性能、减少重绘和重排的开销。

        采用index作为key在破坏了原有顺序的情况下(比如插入到最前面)会发生问题,如下图尚硅谷的图片示例所示:

         而采用数据本身的id作为key则不会出现上述的问题,如下图尚硅谷的图片所示:
 


5.列表过滤

placeholder

        placeholder属性用于在输入字段中显示提示文本,当输入字段为空时显示。它用于提供关于所需输入的示例或说明。当用户开始输入时,placeholder文本会自动清除或替换为实际输入的内容。这个属性可以帮助用户更好地理解所需输入的格式或类型。

前端空字符串

        一个字符串里面一个''空字符串的索引是0,也就是说一个字符串里必然有一个空字符串

使用数据监视watch实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表过滤</title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyWord">
        <!-- 遍历数组 -->
        <ul>
            <li v-for="(per,index) in filterPersions" :key="index">
                {{index}}==>{{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
        <br>
        <hr>
        <br>
    

    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false
    new Vue({
        el:'#root',
        data:{
            keyWord:'',
            // 数组类型
            personList:[
                {id:'001',name:'马冬梅',age:18,sex:'女'},
                {id:'002',name:'周冬雨',age:19,sex:'女'},
                {id:'003',name:'周杰伦',age:22,sex:'男'},
                {id:'004',name:'温兆伦',age:32,sex:'男'}
            ],
            filterPersions :[]
        },
        watch:{
            keyWord:{
                // 加上这个会直接搜索一遍空串,由于都携带空串所以都有了
                immediate:true,
                handler(newValue){
                    // console.log('keyWord改为:' + newValue)
                    this.filterPersions = this.personList.filter((person)=>{
                        return person.name.indexOf(newValue) !== -1
                    })
                }
            }
        }
    });
</script>
</html>

使用计算属性实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表过滤</title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyWord">
        <!-- 遍历数组 -->
        <ul>
            <li v-for="(per,index) in filterPersons" :key="index">
                {{index}}==>{{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
        <br>
        <hr>
        <br>
    

    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false


    // 用computed实现
    new Vue({
        el:'#root',
        data:{
            keyWord:'',
            // 数组类型
            personList:[
                {id:'001',name:'马冬梅',age:18,sex:'女'},
                {id:'002',name:'周冬雨',age:19,sex:'女'},
                {id:'003',name:'周杰伦',age:22,sex:'男'},
                {id:'004',name:'温兆伦',age:32,sex:'男'}
            ]
        },
        computed:{
            filterPersons(){
                return this.personList.filter((person)=>{
                    return person.name.indexOf(this.keyWord) !== -1
                })
            }
        }
    });
</script>
</html>


6.列表排序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表过滤</title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>人员列表</h2>
        <input type="text" placeholder="请输入名字" v-model="keyWord">
        <button @click="sortType = 2">年龄升序</button>
        <button @click="sortType = 1">年龄降序</button>
        <button @click="sortType = 0">原顺序</button>
        <!-- 遍历数组 -->
        <ul>
            <li v-for="(per,index) in filterPersons" :key="index">
                {{index}}==>{{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
        <br>
        <hr>
        <br>
    

    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false

    new Vue({
        el:'#root',
        data:{
            keyWord:'',
            // 0原顺序,1降序,2升序
            sortType:0,
            // 数组类型
            personList:[
                {id:'001',name:'马冬梅',age:28,sex:'女'},
                {id:'002',name:'周冬雨',age:19,sex:'女'},
                {id:'003',name:'周杰伦',age:22,sex:'男'},
                {id:'004',name:'温兆伦',age:32,sex:'男'}
            ]
        },
        computed:{
            filterPersons(){
                // 获取到过滤到的数组
                const filArr = this.personList.filter((person)=>{
                    return person.name.indexOf(this.keyWord) !== -1
                })
                // 根据排序类型来排序
                if(this.sortType !== 0){
                    filArr.sort((p1,p2)=>{
                        return this.sortType === 1?p2.age-p1.age:p1.age-p2.age
                    })
                }

                return filArr
            }
        }
    });
</script>
</html>

效果如下:


7.Vue更新数据检测失败

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表过滤</title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>
    <body>

    <div id="root">
        <h2>人员列表</h2>
        <button @click="updateMaDM">更新马冬梅信息</button>
        <ul>
            <li v-for="(per,index) in personList" :key="per.id">
                {{index}}==>{{per.name}}-{{per.age}}-{{per.sex}}
            </li>
        </ul>
        <br>
        <hr>
        <br>
    

    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false

    const vm = new Vue({
        el:'#root',
        data:{
            // 数组类型
            personList:[
                {id:'001',name:'马冬梅',age:28,sex:'女'},
                {id:'002',name:'周冬雨',age:19,sex:'女'},
                {id:'003',name:'周杰伦',age:22,sex:'男'},
                {id:'004',name:'温兆伦',age:32,sex:'男'}
            ]
        },
        methods: {
            updateMaDM(){
/*                 this.personList[0].name = '马什么梅'
                this.personList[0].age = 50
                this.personList[0].sex = '男' */
                // 出现BUG!!!wdf
                this.personList[0] = {
                    id:'001',
                    name:'马什么梅',
                    age:58,
                    sex:'男'
                }
            }
        },
    });
</script>
</html>

这段代码更新的时候发现更新不了。

原因

        Vue的响应式系统是基于 JavaScript 的 getter 和 setter 实现的。当 Vue 实例被创建时,Vue 会将 data 中的所有属性转化为 getter 和 setter,以便在属性被访问和修改时能够触发依赖追踪并进行相关的更新。

        然而,在我们        的代码中,直接修改了数组中的元素,而并没有调用 Vue 提供的响应式方法来触发更新。

        要使 Vue 能够检测到对数组的更改,可以使用 Vue 提供的方法来进行操作。例如,对于这段代码,我们可以使用 Vue.set 或 Vue.$set 方法来修改数组中的元素:

Vue.set(this.personList, 0, {
    id: '001',
    name: '马什么梅',
    age: 58,
    sex: '男'
});

// 或者使用 Vue.$set 方法:
this.$set(this.personList, 0, {
    id: '001',
    name: '马什么梅',
    age: 58,
    sex: '男'
});

        这样做可以通知 Vue 响应式系统进行相应的更新,使得 Vue 能够检测到对数组的更改并进行相应的重新渲染。


总结

        条件渲染有两种方法:v-if和v-show。

        v-if的写法是v-if="表达式",也可以和v-else-if、v-else一起使用。v-if适用于切换频率较低的场景。它的特点是不展示的DOM元素直接被移除。

        v-show的写法是v-show="表达式",它适用于切换频率较高的场景。v-show的特点是不展示的DOM元素未被移除,仅仅是使用样式隐藏掉。

        需要注意的是,使用v-if的时候,元素可能无法获取到,而使用v-show则一定可以获取到。


v-for指令
        1. 用于展示列表数据
        2. 语法:v-for="(item,index) in xxx" :key="yyy"
        3. 可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)


        key在虚拟DOM中的作用是为了标识和追踪每个DOM元素的身份。当数据发生变化时,Vue或React会根据新的数据生成新的虚拟DOM,并通过比较新旧虚拟DOM的差异来更新页面的真实DOM。

具体的对比规则如下:

  1. 如果在新的虚拟DOM中找到了与旧的虚拟DOM相同的key,那么会判断其内容是否有变化。如果内容没有变化,就直接使用之前的真实DOM;如果内容有变化,就生成一个新的真实DOM并替换掉页面中之前的真实DOM。
  2. 如果在新的虚拟DOM中找不到与旧的虚拟DOM相同的key,就会创建一个新的真实DOM,并将其渲染到页面上。

使用index作为key可能会引发一些问题:

  1. 如果对数据进行逆序添加、逆序删除等破坏顺序的操作,会导致不必要的真实DOM更新,从而降低性能。
  2. 如果列表中还包含输入类的DOM,使用index作为key可能会导致错误的DOM更新,从而导致界面问题。

        在开发中,应该根据具体情况选择合适的key。最好使用每条数据的唯一标识作为key,比如ID、手机号、身份证号、学号等唯一值。如果仅用于渲染列表展示,并且没有对数据进行逆序添加、逆序删除等破坏顺序的操作,使用index作为key是没有问题的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kube-scheduler调度策略之预选策略(三)

一、概述 摘要&#xff1a;本文我们继续分析源码&#xff0c;并聚焦在预选策略的调度过程的执行。 二、正文 说明&#xff1a;基于 kubernetes v1.12.0 源码分析 上文我们说的(g *genericScheduler) Schedule()函数调用了findNodesThatFit()执行预选策略。 2.1 findNodesTha…

Truncated incorrect max_connections value: ‘999999‘

MySQL 的最大连接数&#xff08;max_connections&#xff09;可以设置的上限值在不同的资料中有所不同。以下是一些关键信息&#xff1a; 默认值和默认范围&#xff1a; MySQL 的默认最大连接数通常为 100 。一些资料提到默认值为 151 。 最大允许值&#xff1a; MySQL 的最大…

ant-design-vue:a-table表格中插入自定义按钮

本文将介绍如何使用ant-design-vue在a-table表格中加入自定义按钮和图标的代码。 结果如下图所示&#xff0c; 一、简单示例 <template><a-table:columns"columns":data-source"data":row-selection"rowSelection":ellipsis"tru…

对称密码学

1. 使用OpenSSL 命令行 在 Ubuntu Linux Distribution (发行版&#xff09;中&#xff0c; OpenSSL 通常可用。当然&#xff0c;如果不可用的话&#xff0c;也可以使用下以下命令安装 OpenSSL: $ sudo apt-get install openssl 安装完后可以使用以下命令检查 OpenSSL 版本&am…

深度学习基础案例4--构建CNN卷积神经网络实现对猴痘病的识别(测试集准确率86.5%)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 下一周会很忙&#xff0c;更新可能不及时&#xff0c;请大家见谅这个项目我感觉是一个很好的入门案例&#xff0c;但是自己测试的时候测试集准确率只比较…

mcu loader升级固件原理与实现

1 mcu loader升级固件原理 mcu 固件有两部分&#xff0c;如下图所示&#xff0c;一部分是 loader.bin&#xff0c;一部分是 app.bin&#xff0c;将两部分的固件合并在一起烧录进 mcu 的 flash 当中。mcu 上电进入loader 模式执行 loader.bin 部分的程序&#xff0c;然后读取 fl…

前端踩坑记录:javaScript复制对象和数组,不能简单地使用赋值运算

问题 如图&#xff0c;编辑table中某行的信息&#xff0c;发现在编辑框中修改名称的时候&#xff0c;表格中的信息同步更新。。。 检查原因 编辑页面打开时&#xff0c;需要读取选中行的信息&#xff0c;并在页面中回显。代码中直接将当前行的数据对象赋值给编辑框中的表单对…

51单片机——I2C总线

1、I2C总线简介 I2C总线&#xff08;Inter IC BUS&#xff09;是由Philips公司开发的一种通用数据总线 两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09; 同步、半双工&#xff0c;带数据应答 通用的I2C总线&#…

Linux基础(包括centos7安装、linux基础命令、vi编辑器)

一、安装CentOS7 需要&#xff1a;1、VMware Workstation&#xff1b;2、CentOS7镜像 1、安装镜像 2、虚拟机配置 开启虚拟机&#xff0c;鼠标从vm中移出来用快捷键ctrlalt 点击开始安装&#xff0c;设置密码&#xff0c;等待安装完成,&#xff0c;重启。 3、注意事项 如果没…

通往RAG之路(二):版面结构检测方法介绍

一、基于yolov5的版面结构检测 AG系统搭建过程中&#xff0c;版面分析是不可缺少的一个步骤&#xff0c;本文介绍用yolov5进行版面结构信息识别&#xff0c;后续再搭配表格识别、公式识别、文字识别等模块进行版面还原&#xff0c;完成PDF结构化输出。 1.1、环境搭建 conda c…

解决方案:在autodl环境下为什么已安装torch打印出来版本号对应不上

文章目录 一、现象二、解决方案 一、现象 平台&#xff1a;autodl 镜像&#xff1a;PyTorch 2.0.0 Python 3.8(ubuntu20.04) Cuda 11.8 GPU&#xff1a;A40(48GB) * 1 CPU&#xff1a;15 vCPU AMD EPYC 7543 32-Core Processor 内存&#xff1a;80GB 安装torch:1.13.0环境&a…

深入理解指针(6)

目录&#xff1a; 1.字符指针变量 2.数组指针变量 3.二维数组传参本质 4.函数指针变量 5.函数指针的应用 1.字符指针变量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {char a w;char* p &a;printf("%p ", p);} 当我们想取出…

UE 【材质编辑】自定义材质节点

使用UE的材质编辑器&#xff0c;蓝图提供了大量的节点函数&#xff1a; 实际上&#xff0c;这是一段封装好的包含一串HLSL代码的容器。打开“Source/Runtime/Engine/Classes/Material”&#xff0c;可以看到很多不同节点的头文件&#xff1a; 照葫芦画瓢 以UMaterialExpressi…

ORM 编程思想

一、ORM简介 对象关系映射&#xff08;英语&#xff1a;Object Relational Mapping&#xff0c;简称ORM&#xff0c;或 O/R mapping&#xff09;是一种为了解决面向对象语言与关系数据库存在的 互不匹配的现象。 二、实体类 实体类就是一个定义了属性&#xff0c;拥有getter、…

51单片机——存储器

1、存储器简介 RAM优点存储速度非常快&#xff0c;缺点成本高&#xff0c;掉电丢失数据。 ROM优点掉电不丢失数据&#xff0c;缺点存储速度比较慢。 所以在实际应用中&#xff0c;我们都是采用两者结合的方式。程序运行时&#xff0c;数据存储在RAM中&#xff0c;需…

自己开发完整项目一、登录功能-04(集成jwt)

一、说明 前面文章我们写到了通过数据库查询出用户信息并返回&#xff0c;那么在真实的项目中呢&#xff0c;后端是需要给前端返回一个tocken&#xff0c;当前端通过登录功能认证成功之后&#xff0c;我们后端需要将用户信息和权限整合成一个tocken返回给前端&#xff0c;当前端…

【Python技术】使用langchain、fastapi、gradio生成一个简单的智谱AI问答界面

前几天&#xff0c;智谱AI BigModel开放平台宣布&#xff1a;GLM-4-Flash 大模型API完全免费了&#xff0c;同时开启了GLM-4-Flash 限时免费微调活动。对想薅免费大模型羊毛的个人玩家&#xff0c;这绝对是个好消息&#xff0c;我们不仅可以免费使用BigModel开放平台上的GLM-4-…

产品入门篇笔记

产品和产品经理 产品&#xff1a;解决某个问题的物品&#xff0c;无形、有形都可以。 产品经理&#xff1a;简单而言就是想清楚怎么做的人&#xff0c;需要想清楚产品怎么设计&#xff0c;要分析什么用户、在什么场景、怎么样的需求&#xff1b;然后考虑产品的功能、优势、价值…

LeetCode_sql_day20(1398.购买了产品A和产品B却没有购买产品C的顾客)

描述: Customers 表&#xff1a; ------------------------------ | Column Name | Type | ------------------------------ | customer_id | int | | customer_name | varchar | ------------------------------ customer_id 是这张表中具有唯一…

李沐讲座:大语言模型的实践经验和未来预测 | 上海交大

本文简介 本博客记录了李沐关于语言模型与职业生涯分享的精彩讲座&#xff0c;涵盖了大语言模型的核心要素、工程实践中的挑战&#xff0c;以及演讲者个人职业生涯中的心得体会。 李沐简介 李沐&#xff08;Mu Li&#xff09;是一位在人工智能与深度学习领域具有广泛影响力的…