我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印,结果...

d9b9d08edee25acde422422a5486e286.jpeg

我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印

cb6cd0da47d4f06da15c4e1e8199e653.png

介绍

ChapGPT 听起来好得令人难以置信,所以让我们让它为我们编写一些 JS 代码。我想看看它是否可以解决我作为前端开发人员每天所做的任务。

是驴子是马拉出来溜溜,我们还是直接进入主题一探究竟。

在 React 中构建弹出框组件

虽然这是可能的,但我们不要通过添加一些代码来开始这个实验。让我们简单地要求 ChatGPT 创建两个 React 组件,这两个组件将成为弹出窗的元素和一个切换其可见性的按钮,一开始我是这么问的:

单独创建一个只有按钮(button)的React函数组件的文件,其名字是 ModalOpen。然后再单独创建一个叫 Modal 的函数组件文件,有个 div 在 Modal 函数组件里。

结果把我没有提及到的功能,弹出事件也写出来了,实在令我震惊!

1a4c9d2d9483a1d7c99f9ae7f64fa43c.png

ce79890a1790a163985001d9a03f69b7.png

大家看完以上截图是不是震惊?但是我不想让他这样实现我还未说的功能,我修改了创建代码的指令,修改如下:

单独创建一个只有按钮(button)的React函数组件的文件,其名字是 ModalOpen。然后再单独创建一个叫 Modal 的函数组件文件,有个 div 在 Modal 函数组件里。暂时不要包含事件,只是组件样式而已。

49f181e3c88fe58134eb559004f9c37a.png

0c45e94d38629d37dd21f5ea204dec21.png

这个简单的任务完成得很完美!请注意它如何主动向 HTML 元素添加一些内容,因为它清楚地了解它们的用途。更不用说底部的文字小注释很有帮助!

添加数据状态和事件

接下来,让我们直接进入一个复杂的任务,并要求它添加必要的功能以使按钮打开弹出框,我是这样给他修改组件代码指令的:

能否修改这些组件代码,让 ModalOpen 组件打开 Modal 组件弹出框呢

3158d22fb2cbb2f2e000d5aaea72d17e.png

15b845503eb8eecb3ce43c3feb91e890.png

再次,执行是完美的! ChatGPT 添加了必要的状态、点击事件侦听器和处理程序,以便所有这些都能正常工作。并且超额完成了任务,多实现了一个关闭弹出框的功能,我的指令并没有提及,看来他是个完美主义者。它给出的解释是还是十分完美的。我觉得这对初学者来说是一个很好的学习工具,因为它不仅可以满足您的要求,而且可以清楚地解释它。显然,在任何时候您都可以选择提出更多问题。

新建一个 ParentComponet 父组件

接下来,我们需要将这两个单独的组件,放到 ParentComponet 父组件,现在我们可以这样告诉 ChatGPT 让他们帮我们写一个 ParentComponet 父组件,指令提示语如下:

能否修改代码,将这两个组件引入 ParentComponet 组件里,方便我使用

d760b749ff8c42615f6eb63c23ae3f49.png

f68ead57bb5b93fa8d6c119351361712.png

0982e97410c111504904e21fed3ea3fe.png

没错,这个任务也是十分完美的完成了,而且文字注释我十分满意,到这里,你的感觉如何呢。

添加本地存储

接下来,我们提升门槛,让他完成更复杂的任务,测试它是否可以修改代码并将模态的状态保存在本地存储中。这允许我们即使在浏览器窗口关闭后也能保存模式的状态。接下来我给ChatGpt 如下提示语:

能否修改下 ParentComponent 组件的代码,将 isModalOpen 数据状态存储到本地缓存里(localStorage)?

70aed552b8f5402431569a2b783c7a8e.png

aaee31d3b812fb94a38aec467dcd4bb0.png

760e9041799dcaf68f616e4ccd2e0181.png

执行再次完美,它正确地将布尔值转换为字符串,它也向我们解释了为什么它必须在代码中使用 useEffect,这显然不仅仅是文档中的一般复制粘贴,解释是用我们在代码中的确切变量名称来帮助理解的,我简直不太详细这是个机器人完成的,再次刷新了我的认知。

添加样式和动画

好吧,让我们看看它是否可以与 CSS 和动画一起使用,我认为这对 AI 来说会更棘手一些,第一次我是这么问的:

你能否帮我添加一些 css 动画效果代码呢,当我们点击 ModalOpen 组件,让 Modal 的显示和隐藏效果更自然些。

c06685bcd8f081632a260909e4cf3d88.png

e42f07d187ee18748dcdd5ed465b8b50.png

7abcc95810afd45962de03505c6cc801.png

这段代码不仔细看,你以为它写对了,ChatGPT 也会打盹,一不小心也会糊弄过关,虽然乍一看是对的,但是父组件这样写 <Modal className={isModalOpen ? 'modal open' : 'modal close'} /> ,我们并没有在样式文件里定义 open 和 close ,其实在 open 和 close 加上这两个样式,本案例就完整了,还把本地缓存的逻辑搞丢了,但是我犯懒,不想自己写,继续让 AI 帮我改完吧, 看看能否满意。

接下来我下达修改的提示指令,看看他行不行,我是这样命令的:

请修复下样式文件,还有你把本地缓存的逻辑搞丢了,请修复你的代码

abb6d191e7c29210fbd107c575a90ae1.png

91f70f73405de61faae5a97c88f3e431.png

7b7eadaa2d29364b2a8fc0242594951c.png

到这里算是修复的让我满意,大家是否满意呢?看来AI也是会犯错的,需要人去辅助。

改成 TypeScript 版本的组件

接下来我们继续提高写代码的难度,让其将组件的代码改成 TypeScript 版本的,看看他能否完成呢,我给了以下提示语:

你好,你能将上述组件的代码给出 typescript 版本的组件吗,请完整写出所有组件的代码

5ad9f8584bff8861c13345f718d0ff35.png

由于截图问题,不能完整截图,我这里把最终完整的代码贴出来,大家一起帮忙来挑错,目前我没发现问题,实在另外哇塞,感觉我有魔法,让 ChatGPT 完成我的魔法,很有成就感。

// ModalOpen.tsx
import React from 'react';interface ModalOpenProps {onClick: () => void;
}const ModalOpen: React.FC<ModalOpenProps> = ({ onClick }) => (<button onClick={onClick}>Open Modal</button>
);export default ModalOpen;
// Modal.tsx
import React from 'react';
import './styles.css';interface ModalProps {isOpen: boolean;onClose: () => void;
}const Modal: React.FC<ModalProps> = ({ isOpen, onClose }) => (<div className={`modal ${isOpen ? 'open' : 'close'}`}><button onClick={onClose}>Close</button><p>Modal content goes here</p></div>
);export default Modal;
// ParentComponent.tsx
import React, { useState, useEffect } from 'react';
import ModalOpen from './ModalOpen';
import Modal from './Modal';const ParentComponent: React.FC = () => {const [isModalOpen, setIsModalOpen] = useState(false);useEffect(() => {const storedValue = localStorage.getItem('isModalOpen');if (storedValue) {setIsModalOpen(JSON.parse(storedValue));}}, []);useEffect(() => {localStorage.setItem('isModalOpen', JSON.stringify(isModalOpen));}, [isModalOpen]);return (<div className="App"><ModalOpen onClick={() => setIsModalOpen(true)} /><Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)} /></div>);
};export default ParentComponent;
// styles.css
.modal {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background: rgba(0, 0, 0, 0.5);display: flex;align-items: center;justify-content: center;opacity: 0;visibility: hidden;transition: all 0.3s ease-out;
}.modal.open {opacity: 1;visibility: visible;
}.modal.close {opacity: 0;visibility: hidden;
}.modal p {background: white;padding: 1rem;border-radius: 0.5rem;
}

增加列表数据需求

接下来我们继续增加需求,在 Modal 组件里,增加一些属性,比如显示用户的姓名和头像。我是这样给 ChatGPT 提示语的:

你好,你能基于改写的 TypeScript 版本里,修改Modal 组件代码,在 Modal 组件里定义如下属性:firstName, lastName,profession,profilePhoto,这些属性都是字符串类型的,并在 Modal 组件里显示这些属性的内容。

82573dd5e3d5ffa7acac1ec60997aba3.png

import React from 'react';
import './Modal.css';interface ModalProps {firstName: string;lastName: string;profession: string;profilePhoto: string;isOpen: boolean;onClose: () => void;
}const Modal: React.FC<ModalProps> = ({firstName, lastName, profession, profilePhoto, isOpen, onClose}) => {return (<div className={`modal ${isOpen ? 'open' : 'close'}`}><div className="modal-content"><span className="close-button" onClick={onClose}>×</span><p>First Name: {firstName}</p><p>Last Name: {lastName}</p><p>Profession: {profession}</p><p>Profile Photo: {profilePhoto}</p></div></div>);
};export default Modal;

完美的!完全没有错误,但我的指示很清楚。我们知道它可以理解变量背后的含义,所以我怀疑它能够找出所需的类型(我们稍后会验证这一点)。像往常一样,我们得到了详细的解释,但它并不那么有趣,所以让我们继续前进。

你好,你能继续在 Modal 组件里,增加一个 hobbies 的对象数组属性吗,其结构如下 {nameOfHobby:string; experienceInYears:number; activelyDoing:boolean},修改完成后,请以表格的形式展现 hobbies 属性的数据,继续这些需求,请修改 Modal 组件代码

完成后的截图如,代码有点长,只截图部分:

fe777daf23c94f009a915e99a2ebdfd5.png

完整的代码如下,大家一起 Review 评审下,看看有啥问题吗,我暂时没发下,只能说不错完美。

import React, { useState } from 'react';interface Props {firstName: string;lastName: string;profession: string;profilePhoto: string;isOpen: boolean;onClose: () => void;hobbies: { nameOfHobby: string; experienceInYears: number; activelyDoing: boolean }[];
}const Modal: React.FC<Props> = (props) => {const {firstName,lastName,profession,profilePhoto,isOpen,onClose,hobbies,} = props;return (<div className={`modal ${isOpen ? 'open' : 'close'}`}><button onClick={onClose}>X</button><div className="profile-info"><img src={profilePhoto} alt="profile" /><div><h2>{firstName} {lastName}</h2><p>Profession: {profession}</p></div></div><table><thead><tr><th>Hobby</th><th>Experience (in Years)</th><th>Actively Doing?</th></tr></thead><tbody>{hobbies.map((hobby, index) => (<tr key={index}><td>{hobby.nameOfHobby}</td><td>{hobby.experienceInYears}</td><td>{hobby.activelyDoing ? 'Yes' : 'No'}</td></tr>))}</tbody></table></div>);
};export default Modal;

您能看到它如何增加爱好,经验(年)以及目前在桌子标题上做的吗?而且它还理解,输出积极的布尔值,将其转换为“是”或“否”。实在令人经验,让我感觉到有压力了。

引入第三方库

接下来,让我们看看它是否可以按字母顺序对我们的爱好对象进行排序,并可能使用外部库来解决该问题,我是这样给他提示语的:

你好,在完成的 Modal 组件里,我想针对 hobbies 对象数组进行排序,依据 nameOfHobby 属性,你可以引入第三方库,请修改 Modal 组件代码

df6f255e4552fbf476e36f08b15e1010.png

完成的代码:

import React from 'react';
import { string, number, boolean, arrayOf } from 'prop-types';
import { sortBy } from 'lodash';interface Hobby {nameOfHobby: string;experienceInYears: number;activelyDoing: boolean;
}interface Props {firstName: string;lastName: string;profession: string;profilePhoto: string;hobbies: Hobby[];isOpen: boolean;onClose: () => void;
}const Modal: React.FC<Props> = (props) => {const { firstName, lastName, profession, profilePhoto, hobbies, isOpen, onClose } = props;const sortedHobbies = sortBy(hobbies, ['nameOfHobby']);return (<div className={`modal ${isOpen ? 'open' : 'close'}`}><div className="modal-header"><h2>{firstName} {lastName}</h2><p>{profession}</p><img src={profilePhoto} alt={`${firstName} ${lastName}`} /></div><div className="modal-body"><h3>Hobbies:</h3><table><thead><tr><th>Name of Hobby</th><th>Experience in Years</th><th>Actively Doing</th></tr></thead><tbody>{sortedHobbies.map((hobby) => (<tr key={hobby.nameOfHobby}><td>{hobby.nameOfHobby}</td><td>{hobby.experienceInYears}</td><td>{hobby.activelyDoing ? 'Yes' : 'No'}</td></tr>))}</tbody></table></div><div className="modal-footer"><button onClick={onClose}>Close</button></div></div>);
};Modal.propTypes = {firstName: string.isRequired,lastName: string.isRequired,profession: string.isRequired,profilePhoto: string.isRequired,hobbies: arrayOf(shape({nameOfHobby: string.isRequired,experienceInYears: number.isRequired,activelyDoing: boolean.isRequired,}),).isRequired,isOpen: boolean.isRequired,onClose: func.isRequired,
};export default Modal;

再次完美执行:它决定使用lodash,导入它并写出逻辑以按我们要求的属性进行排序。再次,非常令人印象深刻!

结束

好了,本次测试就到这里,我们就不再折腾 ChatGPT 了,他估计也累了。

本次试验,我努力尝试打破它,让他犯错,但它几乎完美地执行了我的指示,并且似乎理解诸如“爱好”之类的变量的潜在含义,因为它主动添加了我不需要要求的更多需求。

它完美地实现了 React 组件、事件监听器、处理本地存储、样式、动画、使用外部库和 TypeScript 类型,以及数据排序的功能。

就我个人而言,(目前)我并没有感到受到威胁,因为我认为它可以执行简单而微不足道的任务。很明显,您需要成为一名经验丰富的开发人员,才能围绕架构和实施做出复杂的创造性决策,否则您无法让AI帮你完成简单的开发任务,你需要不断地让AI帮你修正错误。

在目前的阶段,我可以将其视为一个 VSCode 插件:我不用打字,而是通过语言提示,让 AI 为我构建元素,在几秒钟内快速完成通常需要我需要花费 5-10 分钟的重复性任务。正如我们在本测试中看到的那样,它的表现非常出色!

人工智能虽然很可怕,但最终,它有可能消除我们工作中不需要创造性思维的重复、无聊的事情。因此,我们可以更快地完成任务,并能够将更多时间花在我们真正喜欢做的事情上!

你怎么看待这件事??这将如何改变我们今天所知道的职业?作为开发人员,您将如何将其纳入您的工作流程?这将如何影响整个行业?

今天的分享就到这里,这是我的一些尝试,你是怎么用ChatGpt写代码的,欢迎在评论区分享。感谢你的阅读,如果你喜欢我的分享,别忘了点赞转发,让更多的人看到,最后别忘记点个关注,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

思路来源:
https://medium.com/bitsrc/i-asked-chatgpt-ai-to-write-react-and-javascript-for-me-and-i-was-shocked-detailed-analysis-d68d55be7746

作者:Mate Marschalko

注释:非翻译,有中文示例改编和案例增加

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

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

相关文章

从0开始搭建前端项目:使用ChatGPT实现高自动化完成率,提高开发效率并掌握最新前端技术

目录 简介ChatGPT简介使用ChatGPT确定项目开发流程提问前端框架包含哪些技术&#xff1f;提问当前最流行的前端框架提问开发流程关于整个视频展示 简介 大家好&#xff0c;我是老李&#xff0c;我很高兴向您介绍我即将发布的一系列关于前端项目开发的文章。在这个系列中&#…

chatgpt赋能python:如何利用Python赚钱

如何利用Python赚钱 Python是一种高级编程语言&#xff0c;因其易学、易用和灵活性而备受程序员和企业的欢迎。在当今数字化时代&#xff0c;Python已经成为广告和营销领域中最热门的编程语言之一&#xff0c;因为它可以被用于制定和执行各种营销策略。本文将介绍如何利用Pyth…

如何利用ChatGPT提升10倍Python效率

作为初学者&#xff0c;我们总是有一些不好意思问的问题。 现在我们可以尽情社恐&#xff0c;我们甚至可以向 ChatGPT 提出最低级的代码问题。 假设我们忘记了如何将两个字典合并。以下是 ChatGPT 可以如何帮助你的部分。 ChatGPT 还可以协助你进行更好的在线学习。假设你正在…

提高副业收入,学习利用ChatGPT工具的重要性

今天聊聊网上怎样做副业&#xff0c;才能让每天收入越来越多&#xff0c;不管你承不承认&#xff0c;从2022年到现在的2023年&#xff0c;人人都感觉没钱了&#xff0c;赚钱越来越难啦&#xff01; 有时好几个月&#xff0c;甚至半年到一年都找不到合适的工作&#xff0c;在这…

ChatGPT的prompt技巧公式

范例演示&#xff1a;如何用ChatGPT绘制一个五角星&#xff1f;⭐️ prompt 角色 任务 要求 提示【步骤拆解、范例说明&#xff0c;技巧点拨等】 用大白话解释就是要告诉chatgpt&#xff1a;你是谁&#xff1f;要做什么&#xff1f;要做成什么样&#xff1f;要怎么做&#…

chatGPT怎么用?提问技巧指南

大家好&#xff0c;我是权知星球&#xff0c;今天跟大家来讨论一下chatGPT怎样用的问题&#xff0c;给大家提供一些提问指南。 自从ChatGPT问世以来&#xff0c;越来越多人对这个工具着迷。现在&#xff0c;很多时候我都会把ChatGPT当做我的工作小助手。然而&#xff0c;尽管C…

使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记

概述 前段时间在 DeepLearning 学了一门大火的 Prompt 的课程&#xff0c;吴恩达本人授课&#xff0c;讲的通俗易懂&#xff0c;感觉受益匪浅&#xff0c;因此在这里总结分享一下我的学习笔记。 为什么要学习 Prompt &#xff1f; 因为在未来的 AIGC 年代&#xff0c;学习有效…

留学生ChatGPT使用技巧:如何用作参考才不算抄袭?

掌握ChatGPT使用技巧对于留学生至关重要&#xff0c;为免触犯学术规条而影响求学生涯&#xff0c;留学生们在使用ChatGPT时都必须格外谨慎。ChatGPT的诞生和爆火&#xff0c;确实大大提高了人们的工作效率&#xff0c;然而对于教育系统来说&#xff0c;却是一场灾难。近期&…

官方网《yucea。cc》ChatGPT加拿大背后的南宫小秘密28圈

最近,如果要问科技圈发生了哪些大事,火爆全网的ChatGPT一定是当之无愧的“明日之星”。 ChatGPT是一款人工智能聊天机器人,自2022年11月下旬上线以来,迅速在社交媒体上走红,仅5天时间,注册用户就突破100万。在不到两个月的时间里,其注册用户已突破一亿。其用户增长速度可…

如何利用ChatGPT革新智能合约和区块链

一、开篇 最近几年&#xff0c;人工智能&#xff08;AI&#xff09;的进步革新了各个行业。ChatGPT是由OpenAI开发的大型语言模型&#xff0c;属于新型的人工智能创新&#xff0c;因此它有潜力改变我们对智能合约和区块链技术的看法。 智能合约可以利用区块链技术自动执行合约…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间&#xff0c;获得超一亿用户&#xff0c;成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线&#xff0c;其AI性能和完善程度再度提升&#xff0c;深受用户和…

ChatGPT和IEN在区块链和元宇宙中的应用

ChatGPT是一种强大的自然语言生成技术&#xff0c;它在区块链和元宇宙中都有广泛的应用。以下是ChatGPT在区块链和元宇宙中的应用场景和实例&#xff1a; 1、区块链应用场景中的ChatGPT 智能合约&#xff1a;ChatGPT可以用来生成智能合约的自然语言文本&#xff0c;使得用户能…

ChatGPT-4问世,区块链开发人员要被替代?

来源/cointelegraph 编译/Nick 3月14日&#xff0c;OpenAI宣布推出大型的多模态模型GPT-4&#xff0c;可以接收图像和文本输入&#xff0c;输出文本&#xff0c;“比以往任何时候都更具创造性和协作性”&#xff0c;并且“由于它有更广泛的常识和解决问题的能力&#xff0c;可以…

简化流程,区块链开发者使用ChatGPT的几种姿势!

简化流程&#xff0c;区块链开发者使用ChatGPT的几种姿势&#xff01; 本文转载自XuperCore开源社区用户thinkingdraw&#xff0c;原文链接https://xupercore.csdn.net/63e4e7df2bcaa918ade995b9.html ChatGPT到底有多火&#xff1f;根据瑞银的研究报告&#xff0c;从推出到活跃…

[Nonebot2]chatgpt

前言 今天我要教大家的是 如何实现nonebot之Gpt接入 准备 1.获取开发者key 获取key的地址&#xff1a;这里你们自行了解&#xff0c;有些原因不能展示 如图所示&#xff0c;我已经创建好一个key了&#xff0c;大家也可以点击Create new secret key按钮来创建一个新的key&am…

冰橙GPT chatGPT开放接口使用说明

冰橙GPT稳定提供API接口服务 定时有人进行问题排查处理 1小时内问题响应 接入了腾讯云的内容安全检测 有任何疑问请加入QQ交流群&#xff1a;310872519 1.请求地址&#xff1a;https://gpt.bcwhkj.cn/api/v2.Gptliu/search 2.请求方式: POST 3.bo…

QQ接入

转载请标明:转载自【小枫栏目】,博文链接:http://blog.csdn.net/rexuefengye/article/details/9833851 简介 本文档主要介绍接入QQ平台的一些内容&#xff0c;便于查阅和使用。 第一步&#xff1a;搭建QQSDK 1.下载对应的 SDK&#xff0c; 将sdk这个目录添加到工程中&#xff…

各大APP注册时发送短信验证码是怎么实现的?

回答这个问题可以从多个角度来回答&#xff0c;比如商务角度和技术角度&#xff0c;为了快速清晰的让广大的读者了解这个过程&#xff0c;本文我们从商务角度来深入分析。 实现原理 现各大APP发送短信的服务一般是由第三方短信服务商提供的&#xff0c;他们整合了移动&#xff…

【日常记录】接入短信发送功能,为实现完整的注册功能做准备

接入阿里短信发送接口&#xff1a; 1、直接去阿里云【云市场】搜索【短信】随便选一个试用测试就行 打开后有相应的api说明 调用地址以及请求参数&#xff0c;可以自己去postman调试或者使用自带的【调试工具:去调试】。 注意&#xff1a;使用postman进行调试时&#xff0c…

手机短信注册验证与登录功能

文章目录 一、前言二、准备工作三、发布短信1、基本测试发布①可-使用测试模板进行调试②测试结果③注意&#xff0c;可能会调试失败&#xff0c;是因为没有余额。进入首页点击头像>进入余额充值&#xff1b;一条大概4分钱④创建SpringBoot项目demo 2、可自定义模板&#xf…