Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
上一节封装图标组件 SvgIcon 时,用到了 defineProps,因为它在开发中的重要性,这里简单看一下它的用法,已熟知用法的此节可跳过。
在 Vue3 的组件化开发体系里,组件间通信是构建高效、可维护应用程序的核心环节。defineProps 作为 Vue3 框架中专门用于接收父组件传递数据的关键函数,在整个组件通信机制中发挥着不可或缺的作用。它不仅极大地简化了组件间数据传递的流程,使其更加简洁高效,还严格遵循 Vue 框架倡导的单向数据流原则,确保了数据流动的清晰性和可预测性。可以说,defineProps 就像组件之间沟通的桥梁,让父组件能够将数据准确无误地传递给子组件,实现数据的 “按需分配”。
1 defineProps 基本用法解析
1.1 运行时声明方式
1.1.1 基本声明语法
在 Vue3 中,defineProps 最基础的使用方式是通过字符串数组来声明接收的属性。如下代码展示了一个简单组件如何接收 title 和 content 属性:
<template><div><h2>{{ props.title }}</h2><p>{{ props.content }}</p></div>
</template><script setup>
// 字符串数组形式声明
const props = defineProps(['title', 'content'])
</script>
这种方式简单直接,适用于快速搭建原型或对属性类型要求不高的场景。但它的局限性在于缺乏类型检查,在复杂项目中可能导致潜在的错误。
1.1.2 类型声明语法(推荐)
在不使用 TypeScript 类型注解时,我们可以利用 JavaScript 对象来声明 defineProps,并通过type 字段明确 props 的数据类型。这种方式在运行时进行类型检查,虽然不如 TypeScript 的静态类型检查严格,但对于简单项目或对强类型依赖不高的场景而言,十分便捷。
例如,创建一个展示文章基本信息的子组件:
<template><div><h2>{{ props.title }}</h2><p>{{ props.content }}</p></div>
</template><script setup>
const props = defineProps({title: {type: String,required: true},content: {type: String,default: '暂无内容摘要'}
})
</script>
在这段代码中,title 被声明为必需的字符串类型,content 同样是字符串类型并设置了默认值。当父组件传递数据时,若未提供 content,子组件会使用默认值展示。这种运行时声明方式符合 JavaScript 编程习惯,易于理解和维护。
1.2 基于类型的声明方式
当项目使用 TypeScript 时,defineProps 借助类型注解实现了强大的静态类型检查功能。这能在编码阶段就发现类型错误,大大提升了代码的可靠性和可维护性。
例如,创建一个展示用户列表的组件:
<template><ul><li v-for="user in props.users" :key="user.id">{{ user.name }} - {{ user.age }}岁</li></ul>
</template><script setup lang="ts">
interface User {id: number;name: string;age: number;
}const props = defineProps<{users: User[];
}>()
</script>
在这个示例中,首先定义了 User 接口明确用户对象的结构和属性类型。然后,通过 <{ users: User[]; }> 这种类型注解方式,告知 defineProps 该组件期望接收名为 users 的 props,其值是 User 类型的数组。这样,在父组件传递数据时,TypeScript 会严格检查数据类型是否匹配,若不匹配,编辑器会立即给出错误提示,帮助开发者及时发现并修复问题。
2 props 的类型与验证
2.1 支持的类型
defineProps 支持多种数据类型声明,为处理不同类型数据提供了极大的灵活性。
2.1.1 基础类型
常见的基础类型包括 String、Number、Boolean ,用于接收简单的文本、数值和布尔值数据。
例如,在展示商品价格的组件中:
<template><div><p>商品价格:{{ props.price }}</p></div>
</template><script setup>
const props = defineProps({price: {type: Number,required: true}
})
</script>
这里,price 被声明为必需的 Number 类型,确保组件接收的数据中 price 一定是有效的数值。
2.1.2 Object 和 Array 类型
除了基础类型,defineProps 还支持 Object 和 Array 类型,用于处理复杂的数据结构。比如,在一个展示用户列表的组件中,我们可以接收一个包含用户信息的对象数组:
<template><ul><li v-for="user in props.users" :key="user.id">{{ user.name }} - {{ user.age }}岁</li></ul>
</template><script setup>
const props = defineProps({users: {type: Array,default: () => []}
})
</script>
这里的 users 是一个 Array 类型的 props ,并且设置了默认值为空数组,以防止在父组件未传递数据时出现错误。
2.1.3 Function 类型
defineProps 还支持 Function 类型,用于接收函数作为 props ,这在一些需要传递回调函数的场景中非常有用。
例如,在一个按钮组件中,我们可以接收一个点击事件的回调函数:
<template><button @click="props.clickHandler">点击我</button>
</template><script setup>
const props = defineProps({clickHandler: {type: Function,required: true}
})
</script>
在这个例子中,父组件可以传递一个函数给 clickHandler ,当按钮被点击时,就会执行这个回调函数。
2.1.4 其他类型
除了上述常见类型,defineProps 还支持许多高级类型,如枚举类型、对象类型、联合类型等。以联合类型为例,假设我们有一个组件,它可以接收字符串或者数字类型的 id :
<template><div><p>ID: {{ props.id }}</p></div>
</template><script setup lang="ts">
const props = defineProps<{id: string | number;
}>()
</script>
在这个示例中,id 被声明为 string 或 number 类型的联合类型,这意味着父组件可以传递字符串类型的 id ,也可以传递数字类型的id ,组件都能正确处理。
2.2 验证方式
为了确保组件接收到的数据符合预期,我们可以对 props 进行验证。defineProps 提供了多种验证方式,包括 type、required、default 和 validator 。
2.2.1 type
type 用于定义数据的类型,这是最基本的验证方式。通过明确指定 props 的类型,Vue 在运行时会检查传入的数据是否符合类型要求,如果不符合,会在控制台抛出警告。例如:
<template><div><p>姓名:{{ props.name }}</p></div>
</template><script setup>
const props = defineProps({name: {type: String}
})
</script>
在这个例子中,name 被定义为 String 类型,如果父组件传递的 name 不是字符串类型,Vue 就会发出警告。
2.2.2 required
required 用于指定 props 是否为必需。当设置为 true 时,如果父组件没有传递该 props ,Vue 同样会在控制台抛出警告。比如:
<template><div><p>订单编号:{{ props.orderId }}</p></div>
</template><script setup>
const props = defineProps({orderId: {type: String,required: true}
})
</script>
在这个场景中,orderId 是必需的字符串类型 props ,如果父组件没有传递 orderId ,则会触发警告,提醒开发者检查数据传递是否完整。
2.2.3 default
default 用于设置 props 的默认值。当父组件没有传递该 props 时,组件会使用默认值。默认值的设置方式根据 props 的类型而有所不同。对于简单类型,如字符串、数字、布尔值等,可以直接设置默认值;对于对象和数组类型,需要通过函数返回默认值,以确保每次使用默认值时都是一个新的实例,避免引用类型数据的共享问题。例如:
<template><div><p>提示信息:{{ props.tip }}</p></div>
</template><script setup>
const props = defineProps({tip: {type: String,default: '暂无提示信息'},userInfo: {type: Object,default: () => ({})}
})
</script>
在这个例子中,tip的默认值是一个字符串,而 userInfo 的默认值是一个空对象,通过函数返回,保证了每次使用默认值时都是一个新的空对象。
2.2.4 validator
validator 是一个自定义验证函数,用于对 props 进行更复杂的验证逻辑。该函数接收一个参数,即父组件传递过来的 props 值,函数返回 true 表示验证通过,返回 false 则表示验证失败,验证失败时 Vue 会在控制台抛出警告。比如,我们要验证一个表示年龄的 props ,要求年龄必须在 18 到 100 之间:
<template><div><p>年龄:{{ props.age }}</p></div>
</template><script setup>
const props = defineProps({age: {type: Number,validator: (value) => {return value >= 18 && value <= 100}}
})
</script>
在这个示例中,validator 函数会检查 age 的值是否在 18 到 100 之间,如果不在这个范围内,就会验证失败,提示开发者传入的年龄不符合要求。
通过 type、required、default 和 validator 这些验证方式的结合使用,我们可以确保组件接收到的数据的有效性和完整性,提高应用的稳定性和可靠性。
3 Vue3.5 中 defineProps 的新特性
Vue 3.5 的发布为 defineProps 带来了一些令人欣喜的新特性,这些特性进一步提升了开发的便利性和效率,让我们一起来深入了解一下。
3.1 响应式 Props 解构
在 Vue3.5 之前,如果我们直接对 props 进行解构赋值,会失去响应式,需要配合使用 toRefs 或者 toRef 解构才会有响应式 ,这无疑增加了开发的工序和代码的复杂性。
例如,在一个简单的计数器组件中,假设父组件传递一个 count 属性给子组件 :
<template><div><p>{{ count }}</p><button @click="increment">增加</button></div>
</template><script setup lang="ts">
import { toRef } from 'vue'
const props = defineProps<{count: number
}>()
const count = toRef(props, 'count')
const increment = () => {count.value++
}
</script>
在这段代码中,为了保持 count 的响应式,我们不得不使用 toRef 将 props.count 转换为一个响应式的 ref ,这使得代码显得有些繁琐。
而在 Vue3.5 中,我们可以直接进行响应式解构,无需借助额外的工具函数 。同样是上述计数器组件,代码可以简化为:
<template><div><p>{{ count }}</p><button @click="increment">增加</button></div>
</template><script setup lang="ts">
const { count } = defineProps<{count: number
}>()
const increment = () => {count++
}
</script>
可以看到,直接解构 defineProps 返回的值,count 依然保持着响应式,当父组件的 count 值发生变化时,子组件会自动更新,反之亦然。这种方式极大地简化了代码,提高了开发效率,让我们的代码更加简洁、直观。Vue 3.5 对解构变量(例如count)的访问会被编译器自动编译成props.count,因此访问时会对其进行跟踪,确保了响应式的正常工作。 这一特性在处理复杂的props 结构时,优势更加明显。比如,当我们需要从一个包含多个属性的对象中解构出多个响应式属性时,Vue3.5 之前的写法会非常冗长,而现在则可以轻松实现。
3.2 新的默认值写法
在 Vue3.5 之前,设置 props的默认值需要使用 default 选项,例如:
<template><div><p>{{ message }}</p></div>
</template><script setup>
const props = defineProps({message: {type: String,default: '默认消息'}
})
</script>
这种写法在定义简单的 props 默认值时还不算复杂,但当props较多或者默认值的逻辑较为复杂时,代码会显得比较臃肿。
3.2.1 使用 JavaScript 原生默认值语法
Vue3.5 中,可使用 JavaScript 原生默认值语法设置 props 默认值,使代码更简洁。例如:
<template><div><p>{{ message }}</p></div>
</template><script setup>
const { message = '默认消息' } = defineProps({message: String
})
</script>
在这个例子中,我们直接在解构时为 message 设置了默认值,这种写法更接近 JavaScript 的常规语法,大大降低了开发者的学习成本和心智负担 。特别是在使用基于类型的 props 声明时,这种新的默认值写法更加简洁高效。例如,在 TypeScript 中:
<template><div><p>{{ count }}</p></div>
</template><script setup lang="ts">
const { count = 0 } = defineProps<{count?: number
}>()
</script>
通过这种方式,我们可以清晰地看到 count 的类型和默认值,代码的可读性和可维护性都得到了显著提升。 新的默认值写法不仅适用于简单类型,对于对象和数组等复杂类型同样适用。比如,当我们需要为一个包含多个属性的对象设置默认值时,可以这样写:
<template><div><p>{{ user.name }}</p><p>{{ user.age }}</p></div>
</template><script setup lang="ts">
const { user = { name: '张三', age: 18 } } = defineProps<{user?: {name: stringage: number}
}>()
</script>
这样,当父组件没有传递 user 属性时,子组件会使用默认的 user 对象,并且代码结构更加紧凑,易于理解。
3.2.2 使用 withDefaults 函数
withDefaults 是 Vue 3.5 引入的新特性,专门用于设置 props 的默认值,同时能提供良好的类型支持。
<template><div><p>{{ message }}</p></div>
</template><script setup lang="ts">
import { defineProps, withDefaults } from 'vue';const props = withDefaults(defineProps<{message?: string;
}>(), {message: () => '默认消息'
});const { message } = props;
</script>
defineProps 定义 props 类型,withDefaults 设置默认值,两者结合使代码结构更清晰,类型检查更严格。
4 综合展示
为全面展示 Vue3.5 中 defineProps 的用法,来看一个完整的父子组件通信示例。假设开发一个简单电商应用,有父组件 ProductList 展示商品列表,子组件 ProductItem 展示单个商品详细信息。
首先,创建父组件 ProductList.vue:
<template><div><h1>商品列表</h1><ProductItemv-for="product in products":key="product.id":product="product"@addToCart="addToCart"/></div>
</template><script setup lang="ts">
import ProductItem from './ProductItem.vue'
import { ref } from 'vue'// 模拟商品数据
const products = ref([{id: 1,name: 'Vue.js 实战指南',price: 59.99,description: '一本深入学习Vue.js的书籍'},{id: 2,name: '智能手表',price: 199.99,description: '具备多种健康监测功能的智能手表'}
])// 模拟添加商品到购物车的方法
const addToCart = (product) => {console.log(`已将 ${product.name} 添加到购物车`)
}
</script>
父组件定义了 products 数组,包含两个商品对象。通过 v-for 指令将每个商品对象传递给ProductItem 子组件,并绑定 product 属性。同时定义 addToCart 方法处理添加商品到购物车的逻辑,作为事件监听器传递给子组件。
接下来,创建子组件 ProductItem.vue:
<template><div class="product-item"><h2>{{ product.name }}</h2><p>价格: {{ product.price }}</p><p>描述: {{ product.description }}</p><button @click="handleAddToCart">添加到购物车</button></div>
</template><script setup lang="ts">
const { product } = defineProps<{product: {id: numbername: stringprice: numberdescription: string}
}>()const emit = defineEmits(['addToCart'])const handleAddToCart = () => {emit('addToCart', product)
}
</script><style scoped>
.product-item {border: 1px solid #ccc;padding: 10px;margin: 10px;
}
</style>
子组件使用 Vue3.5 新特性,直接对 defineProps 进行响应式解构获取 product 对象。定义handleAddToCart 方法,用户点击 “添加到购物车” 按钮时,触发 addToCart 事件,并将当前商品对象传递给父组件。
通过这个综合示例,能清晰看到 Vue3.5 中defineProps在父子组件通信中的实际应用。利用响应式 Props 解构,子组件可以更便捷地访问和使用从父组件传递过来的数据,代码简洁且直观。同时,结合defineEmits实现了子组件向父组件传递数据和事件的功能,完整地展示了 Vue 组件间通信的双向流程。这不仅提升了开发效率,还增强了代码的可读性和可维护性,使得整个组件化开发过程更加流畅。
在实际项目开发中,defineProps的这些特性能够帮助开发者更高效地构建大型应用程序。无论是简单的展示组件,还是复杂的业务逻辑组件,都可以根据具体需求灵活运用 defineProps 的不同声明方式和验证机制,确保组件间数据传递的准确性和稳定性。而 Vue3.5 引入的新特性,更是为开发者在处理响应式数据和设置默认值等常见场景下,提供了更为简洁、强大的工具,进一步降低了开发成本,推动 Vue 应用开发迈向更高的效率和质量水平。随着 Vue 框架的不断发展和更新,相信defineProps以及相关功能还会持续优化,为广大前端开发者带来更多便利和惊喜 。
下一篇将探讨menu组件,敬请期待~
相关文章:
Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
上一节封装图标组件 SvgIcon 时,用到了 defineProps,因为它在开发中的重要性,这里简单看一下它的用法,已熟知用法的此节可跳过。 在 Vue3 的组件化开发体系里,组件间通信是构建高效、可维护应用程序的核心环节。defin…...
HTTP/2 由来及特性
HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚…...
electron.vite 项目创建以及better-sqlite3数据库使用
1.安装electron.vite npm create quick-start/electronlatest中文官网:https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…...
蓝桥杯 Java B 组之枚举算法(暴力破解)
Day 3:枚举算法(暴力破解) 枚举算法(Brute Force)是一种 暴力搜索 方法,它通过 遍历所有可能的情况 来找到正确答案。虽然它的 时间复杂度较高,但在 数据范围较小 时,它是一种简单且…...
AI 控制web浏览器基础知识准备,名词解释Xvfb,x11vnc,novnc,playwright,gradio
在探索如何让AI控制Web浏览器实现自动化任务时,了解底层技术栈是关键。本文将解析五个核心组件:Xvfb、x11vnc、novnc、playwright和gradio,这些工具共同构成了AI驱动浏览器的基础架构。 1. Xvfb(X Virtual Framebuffer࿰…...
C++,STL容器适配器,stack:栈深入解析
文章目录 一、容器概览与核心特性核心特性速览二、底层实现原理1. 容器适配器设计2. 默认容器对比三、核心操作详解1. 容器初始化2. 元素操作接口3. 自定义栈实现四、实战应用场景1. 括号匹配校验2. 浏览器历史记录管理五、性能优化策略1. 底层容器选择基准2. 内存预分配技巧六…...
Vue笔记(十)
一、AI的基本认知 二、ChatGPT的基本使用 三、AI插件--Copilot入门 1.Copilot是由OpenAI和GitHub合作开发的AI编程辅助插件,基于大量代码训练,能根据上下文自动生成代码建议。 2.安装与配置:在常用代码编辑器(如Visual Studio Cod…...
Ubuntu下载安装Docker-Desktop
下载 Ubuntu | Docker Docs 预备工作 Ubuntu增加docker apt库-CSDN博客 安装 sudo apt-get updatesudo apt install gnome-terminal# sudo apt install -y docker-composesudo apt-get install ./docker-desktop-amd64.deb 测试 sudo docker run hello-worldHello from D…...
DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?
随着人工智能技术的飞速发展,大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世,为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲!!! 目录 一、…...
C#运动控制——轴IO映射
1、IO映射的作用 该功能允许用户对专用 IO 信号的硬件输入接口进行任意配置,比如轴的急停信号,通过映射以后,可以将所有轴的急停信号映射到某一个IO输入口上,这样,我们只要让一个IO信号有效就可以触发所有轴的急停。 进…...
ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
集合族谱 在这些集合中,仅有vector和hashtable是线程安全的,其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现,实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...
DeepSeek 指导手册(入门到精通)
第⼀章:准备篇(三分钟上手)1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章:基础对话篇(像交朋友⼀样学交流)2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章:效率飞跃篇&…...
window 11 鼠标右键切换回经典模式
window 11 鼠标右键切换回经典模式 在换新电脑,更新到 window 11 后,鼠标右键很不习惯,把很多功能都隐藏到最后一个打开更多模块了,删除以及刷新等操作也不能使用右键字母快捷操作。 恢复window 11 右键菜单到经典模式 方法一&am…...
RabbitMQ 延迟队列
1.延迟队列插件安装(版本号要对其) Releases rabbitmq/rabbitmq-delayed-message-exchange GitHub 下载的文件: rabbitmq_delayed_message_exchange-3.13.0.ez 直接复制到以下文件夹: \RabbitMQ Server\rabbitmq_server-3.13.7\plugins\ 执行命令…...
Unity3D 类MOBA角色控制器 开箱即用
Github: Unity3D-MOBA-Character-Controller 觉得好用麻烦点个Star感谢!...
认识一下redis的分布式锁
Redis的分布式锁是一种通过Redis实现的分布式锁机制,用于在分布式系统中确保同一时刻只有一个客户端可以访问某个资源。它通常用于防止多个应用实例在同一时间执行某些特定操作,避免数据的不一致性或竞争条件。 实现分布式锁的基本思路: 1. …...
【CXX】0 Rust与C ++的互操作利器:CXX库介绍与示例
CXX库是一个非常强大的工具,它使得Rust和C之间的互操作性变得既安全又高效。本专栏将展示如何使用CXX库来桥接Rust和C代码,同时保持两者语言的特性和惯用法。 一、关键概念 类型安全:CXX库通过静态分析类型和函数签名来保护Rust和C的不变量…...
2024 CyberHost 语音+图像-视频
项目:CyberHost: Taming Audio-driven Avatar Diffusion Model with Region Codebook Attention 音频驱动的身体动画面临两个主要挑战:(1)关键人体部位,如面部和手部,在视频帧中所占比例较小&#x…...
企业文件安全:零信任架构下的文件访问控制
在企业数字化转型的进程中,传统的文件访问控制模型已难以满足日益复杂的网络安全需求。零信任架构作为一种新兴的安全理念,为企业的文件安全访问提供了全新的解决方案。 一、传统文件访问控制的局限性 传统的文件访问控制主要基于网络边界,…...
Rasa学习笔记
一、CALM 三个关键要素: 业务逻辑:Flow,描述了AI助手可以处理的业务流程对话理解:旨在解释最终用户与助手沟通的内容。此过程涉及生成反映用户意图的命令,与业务逻辑和正在进行的对话的上下文保持一致。自动对话修复…...
list_for_each_entry_safe 简介
list_for_each_entry_safe 是 Linux 内核中用于遍历链表的一个宏,特别适用于在遍历过程中可能需要删除链表节点的场景。它的设计保证了在删除当前节点时,不会影响后续节点的访问,从而实现安全的遍历。 定义 #define list_for_each_entry_sa…...
Android 系统面试问题
一.android gki和非gki的区别 Android GKI(Generic Kernel Image)和非GKI内核的主要区别在于内核设计和模块化程度,具体如下: 1. 内核设计 GKI:采用通用内核设计,与设备硬件分离,核心功能统一…...
【面试集锦】如何设计SSO方案?和OAuth有什么区别?
如何设计SSO方案?和OAuth有什么区别?--楼兰 带你聊最纯粹的Java 如果面试问你,你会做一个权限系统吗?那你肯定会说做过。不就是各种登录、验证吗。我做的第一个CRUD应用就是注册、登录。简单!但是,如果问你在工作中真的做过权限系统吗?其实很多人都只能默默摇摇头。因…...
二十六、使用docsify搭建文档管理平台
特性 无需构建,写完文档直接发布容易使用并且轻量 (~19kB gzipped)智能的全文搜索提供多套主题丰富的 API...
bitcoinjs学习1—P2PKH
1. 概述 在本学习笔记中,我们将深入探讨如何使用 bitcoinjs-lib 库构建和签名一个 P2PKH(Pay-to-PubKey-Hash) 比特币交易。P2PKH 是比特币网络中最常见和最基本的交易类型之一,理解其工作原理是掌握比特币交易构建的关键。 想要详…...
如何在 Java 应用中实现数据库的主从复制(读写分离)?请简要描述架构和关键代码实现?
在Java应用中实现数据库主从复制(读写分离) 一、架构描述 (一)整体架构 主库(Master) 负责处理所有的写操作(INSERT、UPDATE、DELETE等)。它是数据的源头,所有的数据变…...
【pytest】获取所有用例名称并存于数据库
数据库操作包,引用前面创建的py文件,【sqlite】python操作sqlite3(含测试) #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-11 8:45 # Author : duxiaowei # File : get_filename.py # Software: 这个文…...
【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)
官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键,Transformer 虽推进了该领域发展,但有效性尚存争议,有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用,提…...
maven导入spring框架
在eclipse导入maven项目, 在pom.xml文件中加入以下内容 junit junit 3.8.1 test org.springframework spring-core ${org.springframework.version} org.springframework spring-beans ${org.springframework.version} org.springframework spring-context ${org.s…...
AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行
目录 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序目标设定与分解自主思考与决策信息交互与执行AUTOGPT是一款基于GPT模型开发的实验性开源应用程序 目标设定与分解 自主思考与决策 信息交互与执行 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序,它能让大语言模…...
