让GPT替我写vue3代码,看的我血压升高

事情是这样子的,最近在写Vue3相关的代码,就想着能不能让GPT辅助我写代码,于是,我就先写了一个中文的prompt

Prompt1: 使用vue3写一个用户登录的页面

分割线内部是GPT的回答:


使用 Vue 3 来创建一个用户登录页面需要涉及到多个方面,比如 Vue 组件、数据绑定、事件处理等。下面我会给出一个简单的例子来展示如何实现这个功能。

首先,你需要确保你已经安装了 Vue CLI,如果没有,请参照 Vue 官方文档 进行安装。

  1. 创建一个新的 Vue 项目:
vue create login-project

选择默认设置或按需配置,然后进入项目目录:

cd login-project
  1. 创建登录组件 (Login.vue):
    src/components 目录下创建一个新的文件,命名为 Login.vue
<template><div><h2>Login</h2><form @submit.prevent="handleLogin"><div><label for="username">Username:</label><input v-model="username" id="username" type="text" required /></div><div><label for="password">Password:</label><input v-model="password" id="password" type="password" required /></div><button type="submit">Login</button></form></div>
</template><script>
export default {data() {return {username: '',password: ''};},methods: {handleLogin() {if (this.username && this.password) {// 这里可以发送请求到服务器进行验证console.log("Username:", this.username);console.log("Password:", this.password);}}}
};
</script><style scoped>
/* 可以添加一些简单的样式 */
</style>
  1. 在主组件中使用登录组件:
    打开 src/App.vue 并引入刚刚创建的登录组件。
<template><div id="app"><Login /></div>
</template><script>
import Login from './components/Login.vue';export default {components: {Login}
};
</script>
  1. 运行项目:
    在命令行中输入以下命令运行项目:
npm run serve

现在你应该可以在浏览器中看到登录页面,并尝试输入用户名和密码。

请注意,这只是一个基础的登录页面实现,实际应用中,你可能还需要添加错误处理、表单验证、与后端服务器的交互等功能。


这个回答最大的问题是它的script部分与我预期不同,我希望是如下的风格形式,

<script setup>
import { ref } from 'vue'
const count = ref(0)
</script><template><button @click="count++">Count is: {{ count }}</button>
</template><style scoped>
button {font-weight: bold;
}
</style>

因此,我就问GPT上述代码是什么风格。

GPT的的回答如下:


你给出的代码使用的是 Vue 3 的 Composition API<script setup> 的组合。这是 Vue 3 引入的一种更加简洁、声明式的方式来使用 Composition API。

来简单解释一下这段代码:

  1. <script setup>: 这是一个特殊的 <script> 标签,表示你将在其中使用 Composition API 的 setup() 函数特性。通过 <script setup>,你可以直接在组件顶级范围中声明响应性引用、计算属性、函数等,而不需要显式定义 setup() 函数。

  2. import { ref } from 'vue': 这从 Vue 导入了 ref 函数,它用于创建一个响应性引用。

  3. const count = ref(0): 这创建了一个响应性引用 count,并初始化其值为 0。使用 Composition API,你通常会使用 refreactive 来创建响应性数据。

  4. <template>: 这部分定义了组件的模板。当按钮被点击时,count 的值会增加,点击事件是通过 @click="count++" 实现的。同时,按钮上显示的文字也会随着 count 的变化而实时更新。

  5. <style scoped>: 这里定义了组件的样式,并使用了 scoped 属性,这意味着这些样式只会应用于当前组件,不会影响到其他组件。

总的来说,你展示的代码风格是 Vue 3 的 Composition API 配合 <script setup> 语法糖使用的风格。这种风格为 Vue 组件提供了更加简洁和灵活的方式来组织和管理响应性逻辑。


于是我改进了我的prompt,

Prompt2: 请使用Vue 3 的 Composition API<script setup> 的组合,编写用户登录的组件

GPT的回答如下


当然可以。以下是使用 Vue 3 的 Composition API<script setup> 来创建用户登录组件的示例代码:

<template><div><h2>Login</h2><form @submit.prevent="handleLogin"><div><label for="username">Username:</label><input v-model="username" id="username" type="text" required /></div><div><label for="password">Password:</label><input v-model="password" id="password" type="password" required /></div><button type="submit">Login</button></form></div>
</template><script setup>
import { ref } from 'vue';const username = ref('');
const password = ref('');const handleLogin = () => {if (username.value && password.value) {// 这里可以发送请求到服务器进行验证console.log("Username:", username.value);console.log("Password:", password.value);}
};
</script><style scoped>
/* 你可以按需添加一些简单的样式 */
</style>

这里有几点需要注意:

  1. 使用了 <script setup>,所以我们可以直接在组件的顶层范围声明变量、函数等。
  2. 当使用 ref 在模板中绑定时,不需要 .value。但在 JavaScript 代码中引用 ref 值时需要使用 .value
  3. handleLogin 函数中,使用了 .value 来访问 usernamepassword 的值。

此示例为基础版本,真实的登录流程应包含错误处理、表单验证、与服务器的交互等。


但是问题来了,我希望的顺序是 script, template, style,因此我又改进了我的Prompt

Promp3: 请使用Vue 3 的 Composition API<script setup> 的组合,编写用户登录的组件, 请按照script, template, style的顺序

如下是GPT的回答,还没等他回答结束,我就发现不对劲了,它的顺序不对啊!

经过一波修改,我得到了如下的Prompt,并且表现还不错,5次中有四次按照我的要求来,但是依旧有一次不按照我的要求来。

Create a Vue 3 Single File Component (SFC) for "user login". only code, no explain, Structure it as follows:<script setup lang="ts">
...
</script><template>
...
</template><style lang="sass">
...
</style>

我很难受,就去群里去吐槽,然后群里的朋友给了提高输出质量的3个技巧

1:定义角色,比如指定它是高级前端开发人员;
2:明确你的要求,越详细越好,可以正向描述,也可以反向要求,比如让他不要输出什么;
3:提供1-2两个示例输出。

按照这个技巧,我写了新的Prompt,如下

Create a Vue 3 Single File Component (SFC) for "user login". The first section  is  <script setup lang="ts"> </script>,  followed by the  <template> </template> section , and finally, the  <style lang="sass"> </style> section.  for example```vue
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script><template><button @click="count++">Count is: {{ count }}</button>
</template><style scoped>
button {font-weight: bold;
}
</style>
\```

新的Prompt,我先说明我要求的顺序,然后给了一个案例,在4.0中测试良好,几乎没出错。但是在3.5中,就没对过。

感想:我终于明白了什么叫做“语言模型,每次都是输出他认为概率最大的一个”。因为template的顺序是vue2时代的主流,显然互联网上占据主导的代码都是template的风格,因此GPT3.5的偏见太深了,几乎不可能被纠正。

当然,如果使用的是API,还是有可能纠正的,

import os
import openai
openai.api_key = "API KEY"completion = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": """You are a professional front-end developer, please help uesrto create a Vue 3 Single File Component (SFC) Component 
The first section  is  <script setup lang="ts"> </script>,  followed by the  <template> </template> section , and finally, the  <style lang="sass"> </style> section.
"""},{"role": "user", "content": "help me create counter component!"},{"role": "assistant", "content":"""```vue
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script><template><button @click="count++">Count is: {{ count }}</button>
</template><style scoped>
button {font-weight: bold;
}
</style>
```"""},{"role": "user", "content": "help me write a user login component"},{"role": "assistant", "content": "```vue\n<template>\n  <div class=\"login-container\">\n ```"},{"role": "user", "content": "you are in wrong order"}]
)print(completion.choices[0].message["content"])

如下是GPT的输出内容,他会直接开始道歉,然后按照正确的顺序给你来。

Apologies for the confusion. Here’s the correct order for creating a user login component:

<script setup lang="ts">
import { ref } from 'vue'const username = ref('')
const password = ref('')
const loggedIn = ref(false)const login = () => {// Add your login logic hereif (username.value === 'admin' && password.value === 'password') {loggedIn.value = true} else {loggedIn.value = false// Show error message or perform any other login failed actionconsole.log('Login failed')}
}const logout = () => {// Add your logout logic hereloggedIn.value = falseusername.value = ''password.value = ''
}
</script><template><div class="login-container"><h2>Login</h2><form @submit.prevent="login"><label for="username">Username</label><input v-model="username" type="text" id="username" required><label for="password">Password</label><input v-model="password" type="password" id="password" required><button type="submit">Login</button></form><div v-if="loggedIn"><h3>Welcome, {{ username }}</h3><button @click="logout">Logout</button></div></div>
</template><style lang="sass" scoped>
/* Add your custom styles here */.login-container {max-width: 400px;margin: 0 auto;
}form {display: grid;gap: 1rem;
}label {font-weight: bold;
}button {background-color: #007bff;color: #fff;padding: 0.5rem 1rem;border: none;cursor: pointer;
}</style>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反射率检测仪如何检测后视镜

后视镜反射率检测是评估后视镜质量的重要步骤&#xff0c;可以反映后视镜的反射效果是否满足设计要求。一般来说&#xff0c;后视镜的反射率越高&#xff0c;驾驶员观察车后的道路状况就越清晰&#xff0c;从而能够更好地判断与后方车辆的距离和速度差。 后视镜反射率检测的原理…

Agent 应用于提示工程

如果Agent模仿了人类在现实世界中的操作方式&#xff0c;那么&#xff0c;能否应用于提示工程即Prompt Engingeering 呢&#xff1f; 从LLM到Prompt Engineering 大型语言模型(LLM)是一种基于Transformer的模型&#xff0c;已经在一个巨大的语料库或文本数据集上进行了训练&…

单元测试到底测什么,怎么测?我来告诉你

前言&#xff1a; 以国内互联网的开发节奏&#xff0c;在前端业务项目中全面覆盖单元测试有时显得不太可行&#xff0c;主要是因为以下这些绊脚石&#xff1a; UI 交互复杂&#xff0c;路径难以覆盖全面 工期紧&#xff0c;开发对实践 TDD&#xff0c;BDD 所带来的长远效益没有…

基于机器视觉的银行卡识别系统 - opencv python 计算机竞赛

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的银行卡识别算法设计 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么

本文参考https://zhuanlan.zhihu.com/p/640723352 准备工作 先准备一个勾选了复制的Actor&#xff0c;然后在游戏开始时Spawn这个Actor 源码过程详解 发送属性同步 在NetDriver的TickFlush中发送属性同步的数据 1、ServerReplicateActors_BuildConsiderList 去找到所有需…

c++ pcl 选取点云某一点反馈XYZ坐标的代码

看了看以前的代码&#xff0c;有一小段代码很有意思&#xff0c;是关于pcl点云处理的。 如有帮助&#xff0c;点赞收藏关注&#xff01;&#xff01;&#xff01; 读取点云数据&#xff0c;想可视化点云数据&#xff0c;并根据选择&#xff0c;实时显示点云的空间坐标数值。 接…

线扫相机DALSA--采集卡Base模式设置

采集卡默认加载“1 X Full Camera Link”固件&#xff0c;Base模式首先要将固件更新为“2 X Base Camera Link”。 右键SCI图标&#xff0c;选择“打开文件所在的位置”&#xff0c;找到并打开SciDalsaConfig的Demo&#xff0c;如上图所示&#xff1a; 左键单击“获取相机”&a…

mysql之语句

1、mysql的扩展语句 &#xff08;1&#xff09;创建表 if not exists yyy&#xff1a;这个表不存在才会创建 zerofill&#xff1a;自动补齐位置 primary key&#xff1a;当前表的主键&#xff0c;主键只能有一个&#xff0c;唯一且不能为空 auto_increment&#xff1a;表示…

AI:43-基于深度学习的昆虫图像识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

Python爬虫程序中的504错误:原因、常见场景和解决方法

概述 在编写Python爬虫程序时&#xff0c;我们经常会遇到各种错误和异常。其中&#xff0c;504错误是一种常见的网络错误&#xff0c;它表示网关超时。是指客户端与服务器之间的网关通信过程中&#xff0c;服务器在规定的时间内没有返回响应&#xff0c;导致请求超时。此类错误…

学习Bootstrap 5的第十九天

目录 范围 自定义范围 步进 最小值和最大值 输入框组 输入组 输入组大小 带复选框和单选框的输入组 输入组按钮 带下拉按钮的输入组 输入框组标签 范围 自定义范围 可以通过将.form-range类添加到type"range"的输入元素来自定义范围菜单的样式。 要创建…

ios 代码上下文截屏之后导致的图片异常问题

业务场景&#xff0c;之前是直接将当前的collectionview截长屏操作&#xff0c;第一次截图会出现黑色部分原因是视图未完全布局&#xff0c;原因是第一次使用了Masonry约束然后再截图的时候进行了frame赋值&#xff0c;可以查看下Masonry约束和frame的冲突&#xff0c;全部修改…