vue3组件通信方式汇总

前言:本文默认读者有JS基础和Vue基础,如果没有这个两个基础,可能阅读比较困难,建议先看下官方文档,当然,也欢迎评论交流😁

通信方式总结

常见搭配形式

一、props(使用频率最高)

1、父传子

<!-- parent.vue -->
<template>
    <di class="parent">
        <h3>这是父组件</h3>
        <!-- 通过props把数组传给子组件 -->
        <Child :technologyStack="technologyStack" />
    </di>
</template>

<script setup lang='ts' name='propsParent'>
import { ref } from 'vue';
import Child from './child.vue'

let technologyStack = ref([
    { id: 1, name: 'Vue' },
    { id: 2, name: 'React' },
    { id: 3, name: 'NodeJs' },
]) //前端技术栈

</script>
<style lang='scss' scoped>
.parent{
    padding: 20px;
    background-color: aqua;
}
</style>
<!-- child.vue -->
<template>
    <div class="child">
        <h3>这里是子组件</h3>
        <ul>
            <li v-for="technologyItem in technologyStack" :key="technologyItem.id">
                {{ technologyItem.name }}
            </li>
        </ul>
    </div>
</template>

<script setup lang='ts' name='propsChild'>
//接受父组件通过props传过来的数据
defineProps(['technologyStack'])

</script>
<style lang='scss' scoped>
.child {
    border: 1px solid #000;
    background-color: aquamarine;
    padding: 20px;
}
</style>

效果 

2、子传父(通过函数) 

<!-- parent.vue -->
<template>
    <di class="parent">
        <h3>这是父组件</h3>
        <h4 v-if="childTechnology">子组件补充的技术:{{ childTechnology }}</h4>
        <!-- 通过props把数组传给子组件 -->
        <Child :technologyStack="technologyStack" :getNewTechnology="getNewTechnology" />
    </di>
</template>

<script setup lang='ts' name='propsParent'>
import { ref } from 'vue';
import Child from './child.vue'

let technologyStack = ref([
    { id: 1, name: 'Vue' },
    { id: 2, name: 'React' },
    { id: 3, name: 'NodeJs' },
]) //前端技术栈

//用于接收子组件传的数据
let childTechnology = ref<string>('')
//子组件通过调用这个方法,给父组件传数据
function getNewTechnology(value: string) {
    childTechnology.value = value
}

</script>
<style lang='scss' scoped>
.parent {
    padding: 20px;
    background-color: aqua;
}
</style>
<!-- child.vue -->
<template>
    <div class="child">
        <h3>这里是子组件</h3>
        <ul>
            <li v-for="technologyItem in technologyStack" :key="technologyItem.id">
                {{ technologyItem.name }}
            </li>
        </ul>
        <button @click="getNewTechnology('threejs')">补充父组件的技术栈</button>
    </div>
</template>

<script setup lang='ts' name='propsChild'>
//接受父组件通过props传过来的数据和方法
defineProps(['technologyStack', 'getNewTechnology'])

</script>
<style lang='scss' scoped>
.child {
    border: 1px solid #000;
    background-color: aquamarine;
    padding: 20px;
}
</style>

效果:




二、自定义事件(区别于原生事件)

常用于子传父,事件名任意,事件对象$event,是调用emit时所提供的数据,数据可以是任意类型

<!-- parent.vue -->
<template>
    <div class="parent">
        <h3>父组件</h3>
        <div>技术栈中技术总数:{{ technologySum }}</div>
        <!-- changeSum就是自定义事件  -->
        <Child  @changeSum="getChangeSum" /> 
    </div>
</template>

<script setup lang='ts' name='xxxxx'>
    import { ref } from 'vue';
    import Child from './child.vue'

    let technologySum = ref<number>(0)
    function getChangeSum(value: number) {
        technologySum.value += value
    }
</script>
<!-- child.vue -->
<template>
    <div class="child">
        <h3>这里是子组件</h3>
        <button @click="onChangeSum">父组件的技术总数+6</button>
    </div>
</template>

<script setup lang='ts' name='customEventChild'>
    const emit = defineEmits(['changeSum'])
    function onChangeSum(){
        emit('changeSum', 6) //触发自定义事件,并传数据
    }
</script>

效果

自定义事件通信

三、mitt(发布订阅)

mitt是一个仓库,与消息订阅与发布(pubsub)功能类似,可以实现任意组件间通信

在使用前我们需要先安装一下

npm i mitt

安装完毕后,因为他是一个工具库,我们新建文件:src\utils\emitter.ts

// emitter.ts文件

import mitt from 'mitt'

// 创建emitter,仓库命名用的是emitter
const emitter = mitt()

// 创建并暴露mitt
export default emitter
<!-- provide.vue -->
<template>
    <div class="provide-container">
        <h3>提供数据的组件</h3>
        <button @click="sendData">发送数据</button>
    </div>
</template>

<script setup lang='ts' name='xxxxx'>
import { ref } from 'vue';
import emitter from '@/utils/emitter' //引入

let sendTxt = ref<string>('我是被发送的数据')
function sendData() {
    emitter.emit('sendData', sendTxt.value) //触发事件,发送数据
}
</script>
<style lang='scss' scoped>
.provide-container{
    background-color: aquamarine;
    text-align: center;
    padding: 20px;
}
</style>
<!-- accept.vue -->
<template>
    <div class="accept-container">
        <h3>接收数据的组件</h3>
        <div>接收到的数据: {{ acceptData }}</div>
    </div>
</template>

<script setup lang='ts' name='xxxxx'>
import { ref, onUnmounted } from 'vue';
import emitter from '@/utils/emitter';

let acceptData = ref<string>('')

//绑定事件
emitter.on('sendData', (value) => {
    acceptData.value = value as string
    console.log('sendData事件被触发,接收到数据value为:', value);
})

//组件卸载后
onUnmounted(() => {
    emitter.off('sendData') //为避免内存泄漏等问题,一定要记得解绑
})

</script>
<style lang='scss' scoped>
.accept-container {
    margin-top: 20px;
    padding: 20px;
    background-color: aqua;
    text-align: center;
}
</style>

路由文件中的引用,这里以兄弟组件为例,要注意mitt可以在任意组件中使用 不限于兄弟组件

效果:

四、v-model (双向绑定)

通过v-model进行通信的方式在UI组件库底层代码中大量使用,去看一下UI组件库的仓库源码就能看到,自己封装UI组件同理

在使用v-model通信前,我们需要先知道v-model是怎么实现数据和视图的双向绑定的

<template>
    <div>通信方式v-model</div>
    <!-- 直接使用v-model实现双向绑定 -->
    <div>v-model输入框</div>
    <input v-model="userName"/>
    <!-- v-model双向绑定的本质是下面这行代码 -->
    <div style="margin-top:20px;">本质语法输入框</div>
    <input :value="author" @input="author = $event.target.value"/>

</template>

<script setup lang='ts' name='VModelFather'>
import { ref } from 'vue';
let userName = ref('Ada King')
let author = ref('hoshino')

</script>

value实现了数据到视图,input事件实现视图到数据,两者结合即完成数据双向绑定功能

 效果如下图,更改前

输入框更改后 

同理,我们在开发过程中,使用UI组件库时,UI组件库的底层代码也是这个原来,下面来模拟一下

<template>
    <h2>通信方式v-model</h2>

    <!-- 使用组件库中的组件,自定义一个输入框组件进行模拟 -->
    <div>组件库input输入框(模拟)</div>
    <CustomInput v-model="userName"/>

    <div style="margin-top:20px;">本质写法=>组件库input输入框(模拟)</div>
    <CustomInput :modelValue="author" @update:model-value="author = $event"/>

</template>

<script setup lang='ts' name='VModelFather'>
import { ref } from 'vue';
import CustomInput from './customInput.vue'
let userName = ref('Ada King')
let author = ref('hoshino')

</script>

而组件库底层代码如下,通过接受props传入的数据,以及结合触发自定义事件(update:model-value)就实现了v-model进行数据通信的功能

<template>
    <input 
        class="input" 
        type="text" 
        :value="modelValue" 
        @input="emit('update:model-value', (<HTMLInputElement>$event.target).value)"
    >
</template>

<script setup lang='ts' name='CustomInput'>
defineProps(['modelValue']) //接收props传入的数据
//update:model-value只是一个完整的事件名,这是vue3的写法,中间的冒号不代表分割
const emit = defineEmits(['update:model-value']) 
</script>
<style lang='scss' scoped>
.input{
    border: 2px solid #000;
    height: 26px;
    border-radius: 4px;
}
</style>

 在我们日常开发中,一般直接使用v-model,那些底层实现,UI组件库已经帮我们处理了,所以本质的写法,我们平时接触不到,负责UI组件封装的小伙伴会接触更多

五、$attrs

$attrs用于祖孙通信,子组件作为中间人传递数据,$attrs是一个对象,包含所有父组件传入的标签属性

注意:$attrs会自动排除props中声明的属性(可以认为声明过的 props 被子组件自己“消费”了)

父组件,可以在控制台看setup中的数据

<!-- father.vue -->
<template>
    <div class="father">
        <h3>父组件</h3>
        <Child :a="a" :b="b" :c="c" :d="d" v-bind="{ x: 100, y: 200 }" :updateA="updateA" />
    </div>
</template>
  
<script setup lang="ts" name="Father">
import Child from './child.vue'
import { ref } from "vue";
let a = ref(1), b = ref(2), c = ref(3), d = ref(4)

function updateA(value: number) {
    a.value = a.value += value
}
</script>
<style lang="scss" scoped>
.father {
    padding: 10px;
    background-color: rgb(160, 64, 219);
}
</style>

 子组件,通过v-bind将$attrs中所有数据都直接传给孙组件,注意不要用props消耗父组件传过来的属性

<template>
    <div class="child">
        <h3>子组件</h3>
        <!-- v-bind 中间人传递 -->
        <GrandChild v-bind="$attrs" />
    </div>
</template>

<script setup lang="ts" name="Child">
import GrandChild from './grandChild.vue'
</script>
<style lang="scss" scoped>
.child {
    background-color: rgb(36, 135, 205);
}
</style>

 孙组件

<template>
    <div class="grand-child">
        <h3>孙组件</h3>
        <h4>a:{{ a }}</h4>
        <h4>b:{{ b }}</h4>
        <h4>c:{{ c }}</h4>
        <h4>d:{{ d }}</h4>
        <h4>x:{{ x }}</h4>
        <h4>y:{{ y }}</h4>
        <button @click="updateA(666)">点我更新A</button>
    </div>
</template>

<script setup lang="ts" name="GrandChild">
defineProps(['a', 'b', 'c', 'd', 'x', 'y', 'updateA'])
</script>
<style lang="scss" scoped>
.grand-child {
    padding: 10px;
    background-color: rgb(176, 232, 175);
}
</style>

六、$refs & $parent

$refs用于父传子通信,$parent用于子传父通信

  • $refs的值为对象,包含所有被ref属性标识的DOM元素或组件实例。
  • $parent的值为对象,是当前组件的父组件实例对象。

1、首先我们看下单个ref实现修改子组件数据的实现

<template>
    <div class="father">
        <h2>父组件</h2>
        <button @click="onChangeBookNum">修改子组件书的数量</button>
        <Child ref="childRef1" />
    </div>
</template>

<script setup lang='ts' name='Father'>
import { ref } from 'vue';
import Child from './child.vue'

let childRef1 = ref()

function onChangeBookNum() {
    console.log('触发了onChangeBookNum事件',childRef1.value);
    childRef1.value.bookCount += 300
}
</script>
<style lang='scss' scoped>
.father {
    padding: 10px;
    background-color: rgb(87, 100, 184);
}
</style>
<template>
    <div class="child">
        <h2>子组件</h2>
        <div>书的总数:{{ bookCount }}</div>
        <div>
            <ul>
                <li v-for="bookItem in bookList" :key="bookItem.id">{{ bookItem.name }}</li>
            </ul>
        </div>

    </div>
</template>

<script setup lang='ts' name='Child'>
import { ref } from 'vue';
let bookCount = ref<number>(200)
let bookList = ref([
    { id: 1, name: '你当象鸟飞往你的山' },
    { id: 2, name: '少有人走的路' },
])

defineExpose({ bookCount }) //子组件主动向外暴露的数据,父组件才能修改
</script>
<style lang='scss' scoped>
.child {
    padding: 10px;
    background-color: aqua;
}
</style>

2、由第1步可以看到,单个ref修改数据已实现, 获取全部ref如下

<template>
    <div class="father">
        <h2>父组件</h2>
        <!-- $refs是特殊占位符,直接用即可 -->
        <button @click="getAllChildRef($refs)">
            获取所有ref
        </button>
        <Child ref="childRef1" />
        <Child ref="childRef2" />
    </div>
</template>

<script setup lang='ts' name='Father'>
import { ref } from 'vue';
import Child from './child.vue'

let childRef1 = ref()
let childRef2 = ref()

//获取所有
function getAllChildRef(refs: { [key: string]: any }) {
    console.log('refs', refs);
}
</script>
<style lang='scss' scoped>
.father {
    padding: 10px;
    background-color: rgb(87, 100, 184);
}
</style>

3、$parent与$refs类似,只是方向改为子传父

<template>
    <div class="father">
        <h2>父组件</h2>
        <div>父亲银行卡数量:{{ bankCardNum }}</div>
        <Child />
    </div>
</template>

<script setup lang='ts' name='Father'>
import { ref } from 'vue';
import Child from './child.vue'

let bankCardNum = ref(2)
defineExpose({ bankCardNum })

</script>
<style lang='scss' scoped>
.father {
    padding: 10px;
    background-color: rgb(87, 100, 184);
}
</style>
<template>
    <div class="child">
        <h2>子组件</h2>
        <button @click="changeBankCardNum($parent)">父亲银行卡+1</button>
    </div>
</template>

<script setup lang='ts' name='Child'>
function changeBankCardNum(parent: any) {
    console.log('父组件实例对象->parent', parent);
    parent.bankCardNum += 1
}
</script>
<style lang='scss' scoped>
.child {
    padding: 10px;
    background-color: aqua;
}
</style>

七、provide & inject

实现祖孙组件直接通信,不用通过中间人

  • 在祖先组件中通过provide配置向后代组件提供数据
  • 在后代组件中通过inject配置来声明接收数据

八、pina

和vue2的vuex类似的功能,是一个全局状态管理库,vue3使用pina作为全局状态管理,更符合视觉,他的store直接支持组合式写法

import {defineStore} from 'pinia'
import axios from 'axios'
import {nanoid} from 'nanoid'
import {reactive} from 'vue'

export const useTalkStore = defineStore('talk',()=>{
  // talkList就是state
  const talkList = reactive(
    JSON.parse(localStorage.getItem('talkList') as string) || []
  )

  // getATalk函数相当于action
  async function getATalk(){
    // 发请求,下面这行的写法是:连续解构赋值+重命名
    let {data:{content:title}} = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json')
    // 把请求回来的字符串,包装成一个对象
    let obj = {id:nanoid(),title}
    // 放到数组中
    talkList.unshift(obj)
  }
  return {talkList,getATalk}
})

数据的读、改和vuex类似,这里不赘述,可以直接看官方文档

简介 | Pinia值得你喜欢的 Vue Storeicon-default.png?t=N7T8https://pinia.vuejs.org/zh/introduction.html

九、slot(插槽)

插槽包含 默认插槽、具名插槽、作用域插槽

1、默认插槽,name=“default”

父组件中:
        <Category title="今日热门游戏">
          <ul>
            <li v-for="g in games" :key="g.id">{{ g.name }}</li>
          </ul>
        </Category>
子组件中:
        <template>
          <div class="item">
            <h3>{{ title }}</h3>
            <!-- 默认插槽 -->
            <slot></slot>
          </div>
        </template>

2、具名插槽

父组件中:
        <Category title="今日热门游戏">
          <template v-slot:s1>
            <ul>
              <li v-for="g in games" :key="g.id">{{ g.name }}</li>
            </ul>
          </template>
          <template #s2>
            <a href="">更多</a>
          </template>
        </Category>
子组件中:
        <template>
          <div class="item">
            <h3>{{ title }}</h3>
            <slot name="s1"></slot>
            <slot name="s2"></slot>
          </div>
        </template>

3、作用域插槽

父组件中:
      <Game v-slot="params"> //这一步是重点
      <!-- <Game v-slot:default="params"> -->
        <ul>
          <li v-for="g in params.games" :key="g.id">{{ g.name }}</li>
        </ul>
      </Game>

子组件中:
      <template>
        <div class="category">
          <h2>今日游戏榜单</h2>
          <slot :games="games" a="哈哈"></slot>
        </div>
      </template>

      <script setup lang="ts" name="Category">
        import {reactive} from 'vue'
        let games = reactive([
          {id:'asgdytsa01',name:'英雄联盟'},
          {id:'asgdytsa02',name:'王者荣耀'},
          {id:'asgdytsa03',name:'红色警戒'},
          {id:'asgdytsa04',name:'斗罗大陆'}
        ])
      </script>

ps:学习笔记,如有不恰当之处,欢迎交流

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

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

相关文章

PNPM 批量检查和更新项目依赖

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

LabVIEW声速测定实验数据处理

LabVIEW声速测定实验数据处理 介绍了一个基于LabVIEW的声速测定实验数据处理系统的应用。该系统利用LabVIEW的强大数据处理和分析能力&#xff0c;通过设计友好的用户界面和高效的算法&#xff0c;有效提高了声速测定实验的数据处理效率和准确性。通过这个案例&#xff0c;可以…

P6354 [COCI2007-2008#3] TAJNA

题目传送门 题目描述 使用一种加密算法。 设字符串的长度为 n&#xff0c;则构造一个矩阵&#xff0c;使得 rcn 且在 r≤c 的情况下使得 r 尽量大。 然后把给定的明文按照由上到下&#xff0c;从左到右的顺序填充这个 rc 的矩阵。 得到的密文就是把矩阵按照从左到右&#…

pytorch数学运算

目录 1. pytorch的数学运算包括2. 基本运算3. matmul4. power sqrt rsqrt5. exp log6. 近似值7. clamp 1. pytorch的数学运算包括 ▪Add/minus/multiply/divide ▪Matmul ▪Pow ▪Sqrt/rsqrt ▪Round 2. 基本运算 、-、*、/ 也可以使用函数add sub mul div 3. matmul 矩阵…

Excel练习:双层图表

Excel练习&#xff1a;双层图表 学习视频Excel制作双层图表&#xff0c;很多人都不会&#xff0c;其实只需1步操作就够了&#xff01;_哔哩哔哩_bilibili ​​ 通过调整两个图形的显示范围实现 增加折现图的负数显示范围&#xff0c;使折现图仅出现在整体图形的上方增加柱形…

VSCODE使用Django 页面和渲染

https://code.visualstudio.com/docs/python/tutorial-django#_use-a-template-to-render-a-page 通过模板渲染页面 文件 实现步骤 1&#xff0c; 修改代码&#xff0c;hello的App名字增加到installed_apps表中。 2&#xff0c; hello子目录下&#xff0c;创建 .\templates\…

什么是矩阵的秩?如何计算矩阵的秩?(done)

什么是矩阵的秩&#xff1f;https://search.bilibili.com/all?vt21986927&keyword%E4%BB%80%E4%B9%88%E6%98%AF%E7%9F%A9%E9%98%B5%E7%9A%84%E7%A7%A9%EF%BC%9F&from_sourcewebtop_search&spm_id_from333.1007&search_source5 矩阵本质上是线性方程组。但是方…

dockerfile文件书写

1.dockerfile构建nginx镜像 1.1书写dockerfile文件 mkdir nginx #创建nginx目录 cd nginx vim dockerfile # 修改文件FROM centos # 基础镜像&#xff0c;默认最新的centos8操作系统 MAINTAINER xianchao # 指定镜像的作者信息 RUN rm -rf /etc/yum.repos.d/* # centos8默认…

【label studio 升级记录】

label studio 版本升级记录 label studio 从1.8.1 升级到1.11.0 过程记录启动后遇到问题1:解决方法: 遇到问题2 安装版本与启动显示的版本不一致解决方法: label studio 从1.8.1 升级到1.11.0 过程记录 # 当前(2024-02)最新版是1.11.0 pip install -U label-studio启动后遇到…

【Python】OpenCV-图片添加水印处理

图片添加水印处理 1. 引言 图像处理中的水印添加是一种常见的操作&#xff0c;用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印&#xff0c;并通过详细的代码注释来解释每一步的操作。 2. 代码示例 以下是一个使用OpenCV库的简单代码示例&…

强化学习入门(Matlab2021b)-创建环境【2】

目录 1 前言2 利用step和reset函数创建自定义环境2.1 对象描述2.2 reset函数2.3 step函数2.3 构建自定义环境3 使用匿名函数传递额外的参数4 可视化检查自定义函数的输出参考链接1 前言 本文介绍如何基于MATLAB编写step、reset函数,创建自己的强化学习环境(Environment)。 使…

手撕qsort函数

前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注​​个人主页&#xff1a;逸狼 更多优质内容&#xff1a; 拿捏c语言指针&#xff08;上&#xff09; 拿捏c语言指针&#xff08;中&#xff09; 拿捏c语言指针&#xff08;下&…

Https证书续签-acme.sh-腾讯云之DnsPod

ename 域名切换到 DnsPod 上面解析 可以先看下之前的 acme.sh 介绍文章然后再来次补充更多。 之前说过了 acme.sh 在阿里云下的使用。 这里做个后续补充 之前的域名是在 ename 上的 &#xff0c;为了自动续签切换到 DnsPod 上面解析 注意事项 可以把原来 ename 上的解析先导出…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson 15 At the Department Store 在百货商店

《美语从头学初级入门篇》 注意&#xff1a;被 删除线 划掉的不一定不正确&#xff0c;只是不是标准答案。 文章目录 Lesson 15 At the Department Store 在百货商店会话A会话B笔记 Lesson 15 At the Department Store 在百货商店 会话A A: Can you help me, please? B: Sur…

电脑任务栏一直转圈圈怎么办 电脑底部任务栏卡死桌面没事的解决办法

最近有一些用户反映&#xff0c;自己的电脑底部任务看卡死桌面没事&#xff0c;不知道是什么原因&#xff0c;也不清楚应该如何解决&#xff0c;是由于资讯和兴趣页面加载时卡死导致的&#xff0c;将其关闭后即可解决&#xff0c;以下是小编提供的电脑任务栏一直转圈圈的解决方…

java 使用documents4j将XML转为pdf文件的方式

1.背景&#xff1a; 通过spire.doc.free将word转换成PDF时存在缺陷&#xff1a;只能获取前3页。获取全文另外需支付费用。 2.解决办法 使用documents4j&#xff0c;documents4j会保留原word文件中更多的样式&#xff0c;如修订模式下的差异化字体颜色、文档右侧修订记录等。 …

Paddlepaddle使用自己的VOC数据集训练目标检测(0废话简易教程)

一 安装paddlepaddle和paddledection&#xff08;略&#xff09; 笔者使用的是自己的数据集 二 在dataset目录下新建自己的数据集文件&#xff0c;如下&#xff1a; 其中 xml文件内容如下&#xff1a; 另外新建一个createList.py文件&#xff1a; # -- coding: UTF-8 -- imp…

K8s ingress-nginx根据请求目录不同将请求转发到不同应用

K8s ingress-nginx根据请求目录不同将请求转发到不同应用 1. 起因 有小伙伴做实验想要实现以下需求: 输入www.pana.com/app1访问app1的svc 输入www.pana.com/app2访问app2的svc 2. 实验 2.1 Dockerfile 先准备Dockerfile FROM nginx:1.20ADD index.html /usr/share/ngin…

长短期记忆神经网络

目录 LSTM 神经网络架构 分类 LSTM 网络 回归 LSTM 网络 视频分类网络 更深的 LSTM 网络 网络层 分类、预测和预报 序列填充、截断和拆分 按长度对序列排序 填充序列 截断序列 拆分序列 指定填充方向 归一化序列数据 无法放入内存的数据 可视化 LSTM 层架构 …

2024年的一些碎碎念(小目标)

新年开工好几天了&#xff0c;最近思绪非常混乱&#xff0c;因为入职软件测试又过去一年了&#xff0c;但是却没有达到像培训机构说的那样月薪过万&#xff0c;所以整个人很焦虑。最近也去投了简历&#xff0c;有个HR说跳槽太频繁拒绝了我&#xff0c;入行两年换了两家公司&…