热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当下React项目该放弃的以及更好用的技术推荐

React版本推荐当前React都已经发布18了,虽然是个alpha版本,但是17确实也已经有大厂在用了。目前如果你的版本还停留在v16.8之前的话还是

React 版本推荐

当前 React 都已经发布 18 了,虽然是个 alpha 版本,但是 17 确实也已经有大厂在用了。

目前如果你的版本还停留在 v16.8 之前的话还是尽早升了吧。毕竟 Hooks 在前几年还会吵吵不好用,现在就各种真香,毕竟代码是真的省了不少,那点学习成本相比收益而言太低了。

同时 Hooks 的使用还能相对解决一部分状态管理的痛苦,实际上大部分项目需要的只是跨组件的通信,而不是管理。因此引入状态管理存粹是增长项目负担,还不如直接用自带的 useContext 解决问题。

网络请求库

axios 大家肯定耳熟能详,实际上在 React 中存在比 axios 好用太多的网络请求库了。

笔者以 swr[1] 举例,除了核心的网络请求之外,这个库还附带了一系列很棒的功能,比如说:

•内置缓存•快速页面导航•间隔轮询•数据依赖•聚焦时重新验证•网络恢复时重新验证•本地缓存更新 (Optimistic UI)•智能错误重试•分页和滚动位置恢复

这一系列的功能不比单纯用 axios 香么?虽然 swr 也支持使用 axios 去请求数据,但少用一个库岂不是更好,除非你的用户还在用不支持 fetch 的浏览器。

当然除了 swr,还存在不少竞品,比如说 React-Query[2],对于这类产品的选择就交给读者了。

CSS

时至今日笔者还能在群里看到群友讨论学 Sass 还是 Less 好,其实预处理器在当前的作用已经相当低了。你要说支持嵌套写法,其实 CSS 新的提案已经支持这种写法了,如下图:

Group.png

你可以在这个文档[3]下查询该提案的细节。

再说回别的功能,比如说变量、函数等等都有解决方案,所以说这类预处理器后面会逐渐退出舞台。

当然有该放弃的,也有可以尝试使用的,比如说:

•Atom CSS,代表作是 tailwindcss[4]•CSS-in-JS,代表作是 styled-component[5]

前者能提高写 CSS 的效率,也能规范样式的使用,同时还能大幅度减少大项目的 CSS 代码体积,可谓一举多得。

后者充分利用了 JS 工具链的优势,去除取名痛苦、减少死代码的产生、方便动态切换主题等等功能,也是一个不错的选择。

当然在引入新技术的同时也会带来一些痛点,毕竟世界上并不存在完美的技术方案,具体对于这些的介绍你可以阅读笔者之前的文章[6]

工具链

时至今日,已经有越来越多的前端工具链产品开始用 Go 或者 Rust 重写,近期就有著名的工具链 Rome 招聘 Rust 开发者重写 Rome:

image-20210804221910647

所以说未来一定会有越来越多性能更好的工具链产品出现,也会有如今我们耳熟能详的产品退出历史舞台。

如今笔者就能介绍不少大家耳熟能详的产品的更好替代品:

•Babel:转译龙头,没有一个项目不使用它。但是如今 esbuild[7]、swc[8] 凭借快数十倍的效率在某些情况下已经能完全替换 Babel。•Webpack:大部分应用肯定都在用它吧,但是因为本身的一些特性导致在开发阶段对于大型项目而言构建过于缓慢。bundless 方案就是为了解决这个问题的,代表作 Vite[9]、Snowpack[10] 在本地的构建效率较之 Webpack 有很大的提升,往后有希望在本地构建环节中替代 Webpack。•包管理器:npm、yarn 大家肯定都在用,但是这些产品又不免存在一些依赖管理层面的问题,pnpm[11] 应运而生,专为解决这一系列问题而来,另外提上一嘴,yarn 已经发布 3.0 了,但是想必不少小伙伴还在用 1.x 的版本吧。

最后

文章到这里肯定会有读者说:「那么多新东西,又得学了!」。实际上笔者觉得这是一个好现象,有新东西学才能弯道超车,啥东西不变才真的会卷死各位。就比如说现在工具链都在用非 JS 来写以获得更好的性能,这不就是一个绝佳弯道超车的机会么?学好 Go 或者 Rust 然后做 / 贡献一个项目不就起飞了?

真的别再说前端东西说或者卷了,殊不知后端才是更卷的地方,难道东西不变大家都躺平不学了?

欢迎读者留言探讨本文相关话题!

引用链接

[1] swr: https://github.com/vercel/swr
[2] React-Query: https://react-query.tanstack.com/
[3] 文档: https://drafts.csswg.org/css-nesting-1/
[4] tailwindcss: https://tailwindcss.com/
[5] styled-component: https://styled-components.com/
[6] 文章: https://juejin.cn/post/6927828841645735949
[7] esbuild: https://esbuild.github.io/
[8] swc: https://github.com/swc-project/swc
[9] Vite: https://vitejs.dev/guide/why.html#slow-server-start
[10] Snowpack: https://www.snowpack.dev/
[11] pnpm: https://pnpm.io/zh/


推荐阅读
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
author-avatar
嫣嫣细语dingdingjq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有