从React到Flutter

举报
青年码农 发表于 2022/08/24 23:40:11 2022/08/24
【摘要】 自从去年底接触flutter到现在,陆续在学习相关的一些基础知识,具备React经验对flutter的学习有很大帮助,官网也对ReactNative开发者有专门的说明,本文对此讨论一下。 Component (React) vs Widget (Flutter) 在React中的Component概念在Flutter中对应概念...

自从去年底接触flutter到现在,陆续在学习相关的一些基础知识,具备React经验对flutter的学习有很大帮助,官网也对ReactNative开发者有专门的说明,本文对此讨论一下。

Component (React) vs Widget (Flutter)

在React中的Component概念在Flutter中对应概念称为Widget,都是为重用而生,也都分为有状态和无状态两类,前者内部维护state,后者则是纯渲染用的无状态组件。少了状态维护和脏状态判断以决定是否需要重新render,无状态组件自然轻量得多。

但React中无状态组件就是一个单纯的function,接收 props返回jsx,轻量到了极限,加上最新支持的hook,function component已经可以拥有自己的状态信息,完成本class component才具备的功能。而flutter中无状态组件stateless widget是个抽象类,跟statefull widget同继承自 Widget,stateless widget从build方法生成Widget,stateful widget则是从createState返回的State调用build方法生成Widget。

867c00fc5a3fd862351766f7672c41d2.png

1. Widget类图

从上面图1可以看到类图继承关系和几个关键成员,注意上面两类箭头,空心箭头表示继承(is),线条箭头表示成员关系(has)。

Element -> Component -> Instance (React) vs Widget -> Element->RenderObject(Flutter)

React中Element是个plain object,简单轻量创建没什么成本,且不可变,用来描述组件的基本信息,包含组件的类型信息(简单的组件类型type就是字符串,比如 div, span;复杂的类型就是类或者方法),Component描述根据传入属性如何生成jsx,而component的instance则是React内部负责创建和销毁,用户不需要直接参与;

Flutter的Widget也是不可变对象,包含Widget的初始化属性信息以及状态信息(针对stateful widget),通过Widget的createElement方法可以创建Element对象,该对象代表Widget对象作为渲染树节点成员,存在Element的一个意义是,因为Widget不可变,则属性信息不变时候Widget可重用,对应渲染树上多个Element对象。Element的renderObject属性返回的RenderObject对象则是真正用于UI渲染的对象,RenderObject子类通过override paint方法实现Widget的UI的绘制。

【免责声明】本文章来源于网络、报刊、新闻等整理而成,文章所述观点并不代表本平台立场,转载是为了更好地传播资讯。我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/125066657

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。