后端自学两个小时前端,究竟能做出什么东西?

news2024/11/25 6:40:37

又来给大家更文了,今天是微服务网关实战的第六篇。

今天的内容比较偏前端一点,主要是给大家换换口味,毕竟学一个东西学久了就想学点新东西休息一点,俗称换换脑子。

其实早就想学学前端看了,不过碍于工作繁忙,也可能是懒癌发作一直没有成行,直到在做OKR的时候有些东西需要前端的支持,而我们又没有多余前端的时候,我就知道,我需要开始学前端了~

在往下讲之前,我忽然想起来我有一位前端网友,在我们之前都还特贫穷的时候(现在升级到贫穷),时常会在一块讨论问题,有时候我会说你们前端怎么怎么样,他就会非常反感,因为他觉得自己不是 front 而是 developer

虽然我被怼了,但是从心底我是同意他的说法的,开发者不应该给自己受限,我们大家都只是在做前端 or 后端这份工作而已,毕竟有的人招进来的时候是前端,现在连运维的活都干呢,你说是吧?@CookieBoty

所以,本文的内容会夹杂前端和后端,前端的可以看看后端内容,后端的可以看看前端内容,换换脑子嘛~

1. Vue

我还依稀记得,三四年前刚学 Java 的时候还要学 CSS、HTML和JS三板斧,做后端工作三年后,我连怎么操作 DOM 都忘记了,可能许多后端小伙伴也和我一样,除了会 HTML 的一点标签,其他前端相关的知识早就忘完了,这也是很多后端迟迟不愿意接触前端的原因,太费心力了。

所以在我决定开始学习前端的第一个问题就是,我应该先学什么?

在我略微思考了三分钟之后,我得出一个结论:我应该先学一个前端框架。

我知道任何一门语言的技术栈都是有一个庞大的生态在支撑的,前端所涉及的东西除了前端框架之外还有打包工具,依赖管理工具,ES6新特性(可能它已经老了,对我来说是新的),卷的狠的再来点拆入拆解浏览器等等等。

这些八股文和 Java 有的一拼,但是我知道我不需要学这些的所有东西,我要学的时候只有一个:用一个工具帮我做成一个东西。

所以,虽然我连解构赋值、和操作DOM都不会,但是这不妨碍我学前端,我要先选中一个前端框架进行熟悉,然后利用这个框架的生态帮我做东西。

扯远了,说回正题,在两三年前的时候,前端还是 Vue、React 和 Angular 三足鼎立,但是到今年 Angular 除了外企似乎已经用的不多了,所以我的学习目标就放在 Vue 和 React 这两个身上了。

怎么选,其实我是纠结的,最终我听从好大哥@CookieBoty和众多网友的建议,学了 Vue。

网上很多人都说 Vue 上手好、文档全,我感觉完美符合我的预期,再加上火影完结之后我就开始追海贼王了,尤大的 onepiece 起名方式甚合我意,所以我就开始学起来了 Vue3。

怎么学呢?我想到了程序员的梦工厂某课网,找了一个教程来看,上面先教了我模板语法,又教了我单页组件,最后又学了 Vue 路由系统,前后花费一个多小时,看了十几节视频,我觉得我行了,就开始实践了~

最终,三天没写完一个页面。

2. React

Vue3 的难度让我有点触不及防,可能也是因为我没有抛弃后端的代码习惯。

我习惯用 TS 定义好数据结构去接收值和处理值,但是我发现 Vue3 中的所有对象都是一个代理对象,当我尝试将一个 Map 数据直接转换为一个 JSON 字符串的时候我发现不行,我也无法理解一个 Map 为啥不能在转 JSON 的时候把里面的 KV 带上,还需要我手动转换成一个对象然后再转一次,我很苦恼。

我更苦恼的是,当我尝试用一个数组对象循环生成某段模板的时候,我发现很麻烦,我感觉这不是我想要的前端,作为一个后端,我学了脚本语言,但是它却让我感觉到很多的枷锁在身上,这比我写 Java 还困难。

此时我意识到,Vue3的上手难度和Vue2不是一样的,这是一个成熟的前端框架了,它需要一个成熟的前端来操作,而不是我这种玩完就扔的二流开发。

当然,Vue 还是有很多好处的,从我可以看见的一点来说就是,ele-plus 这个组件库是真的漂亮。

Vue3 玩不转了,我就想换 React 了,再次来到某课网,找了个 React17 的视频来看,又花了我一个多小时,好在我已经有一些前置知识了,吸收起来还是蛮快的,学习的过程中,我觉得 React 给了我想要的东西:自由,脚本语言写起来的自由感。

在 React 中我不再拘泥于单页组件,统统都是函数式组件,单向数据流也让我更容易理解数据运行的方式,而且会 React 据说B格要比会 Vue 的高一点,这一切都让我觉得转 React 是正确的。

不过有利有弊,在我写 React 的过程中,我发现我在用 Vue3 写代码时候的问题就是 JS 独有的问题,比如我前面提到过的 Map 转 JSON 的问题,它不会因为某个框架就能让我更舒服。

可能有的前端小伙伴会想:你为啥要用 Map?

因为 Map 更符合我这个后端的认知,某些不确定的多选参数我装在一个容器里面,然后序列化后给后端我觉得这是一件极其合理的事情,它符合我的心智模式,但是 JS 或者 TS 都没有做到。

在使用 TS 的过程中,我几乎没有感觉到好处,TS 的类型检查反而让我觉得更不像脚本语言了,这一点我觉得比后端 Kotlin 差很多。

虽然有种种限制,但是好在 React 这个框架并没有让我感觉到有什么不适,反而是无缝衔接,我几乎是上手就写了。

最后总结一下我 React 都学了哪些东西才开始写东西的:

  1. 使用脚手架安装 react with ts。
  2. 声明类组件和函数式组件:函数式组件是主流,类组件稍微看看就行,主要就是写起来麻烦。
  3. 理解 render:render 其实就是通过执行组件代码生成一个HTML片段,然后挂载到DOM上面。
  4. CSS 模块化:通过 CSS 模块化,加样式的时候会非常方便,懒癌患者直接在代码上加行内样式也没问题,玩的就是随心所欲。
  5. State 和 props:state 是重点,它代表了组件中状态,比如按钮是否显示之类的,props 则是不可变参数,由外部传递进来供组件使用。
  6. Hooks:Hooks 我一般只使用到 useState、useEffect、useContext这三个,它们分别代表了声明状态变量,声明副作用钩子和全局数据传递。
  7. 路由:按照我的理解路由是通过占位符和浏览器的锚点来完成的,通过锚点定位到指定代码,通过占位符将组件代码生成到占位符占据的DOM处,当然这只是个人拙见,希望评论区大佬能给出更多细节。

学完上面几项,我觉得你写一个小的管理系统也是没问题的,啊对了,说到管理系统,那必然要用到 http 相关的东西,虽然由 axios 珠玉在前,但是 fetch 用起来也还行。

最后,我觉得 React 的文档比 Vue 的文档强上不少,这句话希望 JYM 别喷我。

3. 组件库

写前端的过程中,想要提效,组件库是必不可少的,我先后体验了 Ant Design、Material UI、Semi Design、Arco Design。

最终在做项目的时候用了 Semi Design,因为它不用引入全局样式表就能按需加载,虽然我的好大哥告诉我 Ant Design 也可以做到这个效果,但是当时确实没有实践成功,还是我的功力太过薄弱。

从目前看来,我用过最舒服最方便的还是 ele-plus 可惜没有 React 版本。

虽然组件库是一个好东西,但是我觉得太过依赖组件库是一件很糟糕的事情,当你要做的功能组件库中有但是恰好达不到你要的效果时,就会很难受,怪不得很多人都要做一个自己的组件库了~

比如 Semi Design,在我使用的过程中我其实很不喜欢它的按钮效果,按钮上面总要有一个底色:

我想要一个无底色的图标按钮,但是 Semi Design 的图标按钮全部都是这样的:

可能这就是它独有的设计风格问题吧,还有一些随时可能遇到会违反自己的直觉的事情,让我意识到,组件库虽然不错,但是过度依赖也为自己的扩展留下很多问题。

写到这,突然就明白了为啥前端有时候会告诉我:” 这个效果我用的组件库做不了 “,我心想你的页面还不是你做主吗,居然能让组件库把开发者给拿捏了,等我也被拿捏的时候,我仿佛理解了他当时的情况,原来我的页面真不是我做主😟

4. 页面效果

虽然我学前端只花了几个小时,但是写页面却花了好久的时间,大部分时间都在调一些样式和排查错误,而且我还自己学了一手 Flex 布局,做了整体的页面布局。

在有时候感觉组件效果不好的时候还自己写了一下鼠标悬浮的阴影之类的小效果:

一套页面做下来整体感觉还是不错的,怪不得前端也被称为交互体验工程师了。

接下来给大家看一下整体效果,这是主页面:

我的这个网关控制台总共分为两个页面:看板和路由表。

路由表就是上图展示的这个,主要是把 Nacos 中的配置拉下来解析成数组对象展示在表格里面,然后在表格里面可以进行编辑和新增,然后通过 openApi 同步到 Nacos 远端去,这样就不用手动去在一堆配置里面改了。

这里要小小的吐槽一下 Nacos 的 Api,它们的这种发布配置居然是 Get 接口的,导致我要现在后端做一层包装,不然数据量大了很容易被浏览器拦截掉,它们新版的 api 接口我也看了相关的代码,居然不是常用的 JSON 传参,就此还和相关开发者对了一次线。

扯远了,说回正题,我的编辑和新增页面如下:

看板则是使用网关做了一些流量指标的记录,比如请求总量、日活总量、每小时在线人数、每小时请求人数之类的基础指标,并且把它们做成了一个图表的形式,有饼状图和折线图:

当然,对我来说最重要的还是路由表的查看页面和新增编辑页面,这几个页面花费了我最多的心力,而且页面的数据结构比较复杂,做起来对我这个新手来说是有点吃力的。

值得一提的是,图表是我做的最轻松的一个页面,用的是蚂蚁的图标组件。

5. 后端

最后,简简单单说一下后端我都做了什么吧。

由于这是后台系统,所以我将它和网关分开,新建了一个 admin 项目来处理相关请求,但是呢?加上前端那我的网关整体就要有三个部署的服务了:网关 API、网关控制台前端、网关控制台后端。

为了节省资源,我通过插件的方式把前端输出的代码copy到网关后端这个应用里面来,这样网关后端和前端的代码就可以打包在一个应用里面了。

其具体做法主要就是在后端应用编译打包的时候用插件先编译前端,然后对前端资源进行复制,具体插件如下:

    <build>
        <plugins>
                 <!-- 调用npm命令插件  -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>3.0.0</version>
                    <executions>
                        <!-- 先执行前端依赖下载 -->
                        <execution>
                            <id>exec-npm-install</id>
                            <phase>package</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <executable>npm</executable>
                                <arguments>
                                    <argumnet>install</argumnet>
                                </arguments>
                                <workingDirectory>../admin-ui/</workingDirectory>
                            </configuration>
                        </execution>
​
                        <!-- npm打包 -->
                        <execution>
                            <id>exec-npm-run-build</id>
                            <phase>package</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <executable>npm</executable>
                                <arguments>
                                    <argumnet>run</argumnet>
                                    <argumnet>build</argumnet>
                                </arguments>
                                <workingDirectory>../admin-ui/</workingDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
​
            <!-- 把 react 编译后的 dist目录下的所有文件拷贝到resource目录下 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-static</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>src/main/resources/static</outputDirectory>
                            <overwrite>true</overwrite>
                            <resources>
                                <resource>
                                    <!-- 因为react打包目录在项目根目录,所以从这里复制 -->
                                    <directory>../admin-ui/build</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
复制代码

平时调试和开发的时候依然可以像前后端分离那样,启动一个后端服务和一个前端服务,只在最终打包的时候打包在一块,所以这种方式哪怕是让一个专职前端来帮你写页面,对他来说也是无感知的,不需要关心后端干了啥。

6. 最后

好了,今天的文章就是以上这些内容了,本篇主要内容没有涉及到太多技术(当然也分享了一个前后端联合打包技巧),主要是分享了我自己在为项目写一些前端代码的心路历程,相信现在有很多工程师都对全栈很有兴趣,我也是想借此告诉大家,其实前端并没有太难学,几个小时完全可以上手写页面了。

Just do it.

最后,如果大家觉得本文还不错的话就可以点赞以示支持,对前端这块内容有更好的建议和说法也可以在评论区留言,我会积极对线的,下篇见。

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

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

相关文章

冒泡排序和数据结构和算法可视化网站(及其一点小优化)

目录 一、冒泡排序的原理 二、动图演示原理 三、代码实现&#xff1a; 四、优化后的冒泡排序 五、算法演示网站 一、冒泡排序的原理 冒泡排序就是两两交换&#xff0c;第一趟排序可以得到最大值&#xff0c;那么第二趟排序就不用再比较最大值了&#xff0c;同样是两两交换…

电商后台管理系统(基于SSM + Vue + Restful + jquery + axios)

1.项目架构 2.config配置 JdbcConfig public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.username}")private String username;Value("${jdbc.password}&qu…

Spring——五大类注解和方法注解详解

文章目录1.Spring的创建2.Spring对象的存储3.将 Bean 对象通过配置文件注册到 Spring 当中4.从 Spring 中将 bean 对象读取出来并使用4.1 先得到 Spring 上下文对象4.2 再通过上下文对象提供的方法获取需要使用的baen对象4.3 使用bean对象[可选步骤]4.4 获取 getBean 的更多方法…

易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)

N1-甲基腺苷&#xff08;N1-methyladenosine&#xff0c;m1A&#xff09;是一种普遍存在于真核生物tRNA、rRNA和mRNA且可逆的转录后RNA修饰。基于高通量测序技术最新研究揭示m1A RNA修饰在基因调控和生物过程中的关键作用&#xff1a;对RNA稳定性和翻译起始等过程有着重要调节作…

Mybatis+Spring+SpringMVC及SSM整合

文章目录一、Mybatis&#xff08;一&#xff09;Mybatis简介1、Mybatis历史2、Mybatis特性3、Mybatis下载4、和其它持久化层技术对比&#xff08;二&#xff09;搭建Mybatis1、MySQL不同版本的注意事项2、创建Maven工程1、引入依赖3、创建MyBatis的核心配置文件3.1、核心配置文…

WRF进阶:WRF中Noah-MP地面方案中雪反照率的计算

Noah-MP简介 Noah-MP是以Noah-LSM为基础发展的一种多层模型&#xff0c;相对于Noah-LSM&#xff0c;它对于下垫面的冠层、土壤、积雪有了更多的拓展。 Noah-MP允许3层雪&#xff0c;对于雪的模拟有了极大的提升&#xff0c;同时&#xff0c;Polar-WRF中对Noah LSM和Noah MP中海…

IIS 部署HTTP 转 HTTPS完整版

1,准备SSL证书&#xff0c;阿里云有1年免费证书 免费证书有 20个&#xff0c;每年用一个就行 审核通过后下载 下载文件包含证书文件和密码 2.安装重定向模块 如果IIS上默认有安装Web平台安装程序&#xff0c;我们可以使用平台自动安装URL Rewrite重写工具&#xff0c;也可以…

Tomcat日志分割

使用cronolog日志切分工具 RPM包下载方法&#xff1a;在 rpmfind.net 上搜索cronolog选择对应RPM包复制下载链接即可 下载安装 cronolog yum install https://rpmfind.net/linux/epel/7/x86_64/Packages/c/cronolog-1.6.2-14.el7.x86_64.rpm -y验证是否安装成功及安装位置 使…

《安卓逆向》Magisk的编译踩坑记录-安装方法-分享魔改后的Magisk过root检测方法

为什么: 1.体验下如何编译面具源码 2.魔改面具-绕过更深的root检测 1.ubuntu 虚拟机下载地址 http://mirrors.aliyun.com/ubuntu-releases/20.04/github:https://github.com/topjohnwu/Magisk 编译根据这篇文章做好前缀下代码工作 https://zhuanlan.zhihu.com/p/385255256编…

图片1920x1080分辨率怎么调 ?图片如何修改分辨率?

图片是我们日常生活中经常需要使用到的东西&#xff0c;但是在使用图片时我们会遇到需要调图片分辨率的情况&#xff0c;有很多小伙伴对于图片分辨率这个概念并不了解&#xff0c;今天就来为大家具体介绍一下图片1920x1080怎么调以及怎么给图片修改分辨率&#xff0c;下面一起来…

美食杰项目 -- 首页(一)

目录前言&#xff1a;具体实现思路&#xff1a;步骤&#xff1a;1. 展示美食杰项目首页效果2. 引入 element-ui3. 头部代码4. 首页内容总代码5. 轮播图代码6. 已发布菜品内容代码7. 加载图片页面代码总结&#xff1a;前言&#xff1a; 本文给大家讲解&#xff0c;美食杰项目中…

Windows右键菜单美化(适用版本:Win7-Win11) 奇怪的美化教程 #1

在我的上篇文章中&#xff0c;只有 0% 的人点了赞 咋一人没有啊&#xff01; 所以如果觉得做的还行的话可以给我点个赞、收个藏&#xff0c;这对我真的很重要&#xff01;QWQ 祖传前言 众所周知&#xff0c; Windows11 整了个新的右键菜单 (而原来的右键菜单变成了 显示更多…

基于微信小程序的桥牌计分系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mave…

m基于MATLAB的FM调制收音机仿真实现

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 那么FM调制端的基本原理图如下所示&#xff1a; FM解调 FM解调的基本原理框图为&#xff1a; 在不考虑频偏的情况下&#xff0c;FM解调运算就相当于FM调制的逆运算&#xff0c;任务的第…

二叉树的性质的结点数与高度的计算题

二叉树是一种特殊的树形结构&#xff0c;每个结点最多只有两棵子树&#xff0c;即度最大为2&#xff0c;且二叉树左右子树不能颠倒。 主要常见分类有&#xff1a; 满二叉树&#xff1a; 除了叶子结点外&#xff0c;每个结点的度数都是2&#xff0c;若高度为h&#xff0c;则一…

Redis的5大数据类型

Redis的5大数据类型 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串。 5种数据类型&#xff1a; redis字符串&#xff08;String&#xff09;redis列表&#xff08;List&#xff09;redis集合&#xff08;Set&#xff09;redis哈希表&#xff08;Hash&a…

PMP®|对如何做好项目管理的几点建议

PMP|对如何做好项目管理的几点建议 来自一位从事工程项目管理多年&#xff0c;也接触过软件开发项目的资深人士针对如何做好项目管理泛泛提些建议。 1、明确项目组自身定位。不同公司对项目管理的理解不同&#xff0c;项目制的执行方式不同&#xff0c;项目组在各公司的地位…

使用springboot每日推送早安问候语到用户微信【部署篇】

上一篇介绍文章 上一篇介绍文章 https://blog.csdn.net/weixin_45206218/article/details/127872136代码仓库 代码仓库 https://gitee.com/stevezhaozps/daily-weather前期准备 一台云服务器云服务器安装MySQL8.x云服务器安装jdk8 数据库初始化 由于本项目使用的是springd…

LIVOX HAP激光雷达使用方法

一、Livox HAP介绍 Livox HAP 由 Livox 团队耗时两年精心打造&#xff0c;是 Livox 首款面向智能辅助驾驶市场研发的车规级激光雷达。HAP 于 2021 年在全新自建的车规级智能制造中心进行批量生产&#xff0c;可满足 74 项严苛的车规可靠性要求。HAP 已成功为小鹏汽车、一汽解放…

C#【必备技能篇】Release下的pdb文件有什么用,是否可以删除?

文章目录一、简介二、问答三、Release中删除pdb文件四、重要事项一、简介 英文全称&#xff1a;Program Database File 中文全称&#xff1a;程序数据库 文件 程序数据库 (PDB) 文件保存着调试和项目状态信息&#xff0c;使用这些信息可以对程序的调试配置进行增量链接。 在…