当前位置:首页 > 科技  > 软件

Solid 作者从 React 中学到最重要的是什么?

来源: 责编: 时间:2023-11-30 09:30:17 353观看
导读大家好,我卡颂。前端界有句玩笑话 —— 「React 一点都不 react,Solid 才应该叫 React」。作为一款「借鉴了很多 React 特性」的前端框架,截止目前,Solid已经有 29.6kstar。显然,他已经得到了社区的认可。前段时间,Solid的

p8128资讯网——每日最新资讯28at.com

大家好,我卡颂。p8128资讯网——每日最新资讯28at.com

前端界有句玩笑话 —— 「React 一点都不 react,Solid 才应该叫 React」。p8128资讯网——每日最新资讯28at.com

作为一款「借鉴了很多 React 特性」的前端框架,截止目前,Solid已经有 29.6kstar。显然,他已经得到了社区的认可。p8128资讯网——每日最新资讯28at.com

p8128资讯网——每日最新资讯28at.com

前段时间,Solid的作者「Ryan Carniato」在博文Thinking Locally with Signals[1]中提到 —— SolidReact中学到的最重要的东西,不是JSX虚拟DOM,而是一个被称为「局部思考」(Locality of Thinking)的概念。p8128资讯网——每日最新资讯28at.com

本文就来聊聊这个对前端开发影响深远的理念。p8128资讯网——每日最新资讯28at.com

局部思考是什么?

当我们新入职一家公司,在熟悉项目代码阶段,领导通常会分配给我们一些小需求,帮助我们快速熟悉项目代码。p8128资讯网——每日最新资讯28at.com

这个过程是如此自然,以至于我们都忽视了一个重要问题 —— 为什么在一个庞大的项目代码库中,即使不熟悉代码,也能轻松修改一些小功能?p8128资讯网——每日最新资讯28at.com

答案是 —— 「局部思考」理念在发挥作用。p8128资讯网——每日最新资讯28at.com

「局部思考」是指你可以不看其他代码,只通过一个组件的代码就能理解它的行为。这种思考方式对代码的可维护性和可读性有着重大影响。p8128资讯网——每日最新资讯28at.com

首先,在大型项目中,代码的「可维护性」至关重要。如果每次修改都需要理解整个代码库,那么这个项目可能会很快变得难以维护。p8128资讯网——每日最新资讯28at.com

其次,从「可读性」的角度来看,如果代码的可读性好,那么新的开发人员可以更快地理解和开始他们的工作。p8128资讯网——每日最新资讯28at.com

通过「局部思考」,可以使代码更易读、可维护性更高。试想,这不正是「使用框架开发」相比于「使用 jQuery 开发」的优势么?至于框架的其他特性(比如虚拟DOM细粒度更新Hooks...)都是在「局部思考」的基础上发展出来的。p8128资讯网——每日最新资讯28at.com

可以说,「局部思考」是「框架开发」这种工作模式的基石。p8128资讯网——每日最新资讯28at.com

如何实现局部思考

假设项目中有如下代码,你能保证结果是true么:p8128资讯网——每日最新资讯28at.com

const obj = {}someFunction(obj)// 结果是 true 么?console.log(obj.value === undefined)

要想知道结果,必须看someFunction函数的内部实现。如果项目中大量充斥了上面这样的代码,对可读性、可维护性简直是灾难。p8128资讯网——每日最新资讯28at.com

「局部思考」理念的提出就是为了解决上述问题。要实现「局部思考」,有四个重要因素:p8128资讯网——每日最新资讯28at.com

  • 单向数据流
  • 读写分离
  • 显式突变
  1. 组件隔离

单向数据流

数据应该只在一个方向上流动。这样可以保证数据的来源和使用是一致的,使得代码行为更可预测,减小了出现bug的可能性。p8128资讯网——每日最新资讯28at.com

考虑如下Solid代码,数据只从父组件流向子组件。子组件只读取数据,而不能改变它:p8128资讯网——每日最新资讯28at.com

// 父组件内const [count, setCount] = createSignal(0);<ChildComponent count={count()} />// 子组件内const ChildComponent = ({ count }) => {  // count是只读的  return <div>{count}</div>}

读写分离

读取数据和修改数据应该是两个独立的操作。这样可以降低代码的复杂度,使得阅读和理解代码更简单。p8128资讯网——每日最新资讯28at.com

考虑如下Solid代码,SomeComponent通过title()读取值,通过setTitle修改值。这种分离使得我们可以更好地理解状态何时变化。p8128资讯网——每日最新资讯28at.com

// [读, 写]const [title, setTitle] = createSignal("title");// `SomeComponent`不能改变`title`<SomeComponent title={title()} />// 现在`SomeComponent`可以更新title<SomeComponent title={title()} updateTitle={setTitle} />

在Svelte中,状态(或者叫signal)只能「按值传递」,所以下面SomeComponent即使接收title作为props,也无法直接修改他。p8128资讯网——每日最新资讯28at.com

要修改他,需要执行updateTitle方法(方法内部闭包中的title是signal,可以响应更新)。这也是一种「读写分离」的实现。p8128资讯网——每日最新资讯28at.com

let title = $state("title")// `SomeComponent`不能改变`title`<SomeComponent title={title} />// 现在`SomeComponent`可以更新title<SomeComponent title={title} updateTitle={(v) => title = v} />

显式突变

所有的数据变化应该是显式的,而不是在背后默默发生。这样更容易跟踪数据的变化。考虑如下Solid代码:p8128资讯网——每日最新资讯28at.com

// 定义状态const [count, setCount] = createSignal(0);// 显式改变状态setCount(count() + 1);

是不是一下就想到了React中的useState呢?没错,其实不止是useState,在ClassComponent的this.setState也是遵循同样的原则。p8128资讯网——每日最新资讯28at.com

组件隔离

每个组件应该只关心自己的状态和逻辑,而不是其他组件的。这样可以保证组件之间的独立性,降低耦合度,使得代码更易于维护。p8128资讯网——每日最新资讯28at.com

总结

如果你觉得以上的介绍一点技术含量都没有,那是再自然不过的事。因为这些原则都是React最基本的使用规范。p8128资讯网——每日最新资讯28at.com

本文存在的意义,是阐述一个观点 —— 这些规范之所以存在,是为了共同实现「局部思考」的理念。而这一理念,才是前端框架可维护性、可读性的来源。p8128资讯网——每日最新资讯28at.com

按照这个思路去思考,就能明白很多React特性的用意,比如:p8128资讯网——每日最新资讯28at.com

  • 为什么函数组件替代了类组件。
  • 为什么会出现useEffect这个Hook。
  • 为什么ref不能跨函数组件传递。

这些特性的背后,都体现了「局部思考」的理念。p8128资讯网——每日最新资讯28at.com

参考资料

[1]Thinking Locally with Signals:https://dev.to/this-is-learning/thinking-locally-with-signals-3b7h。p8128资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35334-0.htmlSolid 作者从 React 中学到最重要的是什么?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python GUI 新手入门教程:轻松构建图形用户界面

下一篇: 优雅的springboot参数校验,你学会了吗?

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之&ldquo;想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!&rdquo;曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
Top