大家好,我卡颂。
崆峒ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
有3个容易混淆的前端框架概念:
在继续阅读本文前,读者可以思考下是否明确知道三者的含义。
这三者之所以容易混淆,是因为他们虽然同属前端框架范畴内的概念,但又不是同一抽象层级的概念,不好直接比较。
本文会从3个抽象层级入手讲解这三者的区别。
「响应式更新」也叫「细粒度更新」。同时,最近前端圈比较火的Signal
这一概念描述的也是「响应式更新」。
笼统的讲,「响应式更新」描述的是「状态与UI之间的关系」,即「状态变化如何映射到UI变化」。
考虑如下例子(例子来自what are signals[1]一文):
function TodoApp() {
const [todos, setTodos] = useState(
[{ text: 'sleep', completed: false }]
)
const [showCompleted, setShowCompleted] = useState(false)
const filteredTodos = useMemo(() => {
return todos.filter((todo) => !todo.completed || showCompleted)
}, [todos, showCompleted])
return (
)
}
在TodoApp组件中,定义了两个状态:
以及根据上述状态派生出的状态filteredTodos。最终,返回
如果todos状态变化,UI该如何变化?即「我们该如何知道状态变化的影响范围」?这时,有两个思路:
我们可以从变化的状态(例子中为todos)出发,根据状态的派生关系,一路推下去。
图片来自what are signals一文
在例子中:
这就建立了「状态与UI之间的关系」。
除了「推」之外,还有一种被称为「拉」的方式。
同样的例子,我们也能建立「状态与可能的UI变化的关系」,再反过来推导UI
变化的范围。
图片来自what are signals一文
在例子中:
在主流框架中,React的更新以「推」为主,Vue、Preact、Solid.js等更多框架使用「拉」的方式。
本文聊的「响应式更新」就是「拉」这种方式的一种实现。
我们可以发现,不管是「推」还是「拉」,他们都需要计算变化的影响范围,即「一个状态变化后,究竟有多少组件会受影响」。
那么,从框架作者的角度出发,是希望增加一些约束,来减少「计算影响范围」这一过程的复杂度。
同样,从框架使用者的角度出发,也希望增加一些约束,当「计算影响范围」出bug
后,更容易排查问题。
这就有了「单向数据流」。
「单向数据流」是一条约定,他规定了「当状态变化后,变化产生的影响只会从上往下传递」。
考虑如下例子:
function Parent() {
const [num] = useState(0);
return;
}
function Child({data}) {
const isEven = data % 2 === 0;
return;
}
function GrandChild({data}) {
return{data}
;
}
「单向数据流」并不是实现前端框架必须遵循的原则,他的存在主要是为了减少开发者的心智负担,让「状态变化后,计算影响范围」这一过程更可控。
当本文开篇聊「响应式更新」时,讨论的是「状态与UI的关系」,这是将框架作为一个整体来讨论,抽象层级比较高。
当我们继续聊到「单向数据流」时,讨论的是「状态变化的影响范围在组件间单向扩散」,这是「组件与组件之间的关系」,抽象层级下降了一级。
接下来我们要讨论的「双向数据绑定」,讨论的是单个组件内发生的事。
「双向数据绑定」是「状态+改变状态后触发的回调」相结合的语法糖。
这里不讨论框架语境下「语法糖」一词是否完全准确
比较知名的「双向数据绑定」实现,比如Vue
中的v-model
语法:
相当于如下状态+事件回调的组合:
实际上早期React中也有类似实现,名叫LinkedStateMixin[2],只是早已被废弃
我们可以用一张图概括本文介绍的3个概念之间的关系:
概括起来主要是两点:
其中:
[1]what are signals:https://signia.tldraw.dev/docs/what-are-signals。
[2]LinkedStateMixin:https://reactjs.org/docs/two-way-binding-helpers.html。
分享名称:三个容易混淆的前端框架概念
链接URL:http://www.csdahua.cn/qtweb/news32/257832.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网