皮皮网

皮皮网

【abi主图源码】【实验室管理源码】【卡五星 源码】iconfont项目源码_iconfont代码

时间:2024-11-27 02:32:42 分类:探索

1.React组件设计-仿网易有道翻译主页
2.Iconify - 这个网站收集了很多免费商用的项目图标,设计师和开发者的源码终极图标集
3.如何评价 React Native
4.三步将iconfont的任意icon以组件形式引入vue(vue3.0可用)

iconfont项目源码_iconfont代码

React组件设计-仿网易有道翻译主页

       前言

       React组件化开发非常有利于搭建项目,也提高了组件的代码复用性。由于频繁使用网易有道翻译这个软件,项目让我萌生出想要征服ta的源码冲动。开发过程中遇到了些许问题,代码abi主图源码页面还有很多功能还未完善,项目现在只有一个首页,源码后续功能持续完善中。代码

前期准备

       在组件页面成型之初需要几个开源组件库:

       axios:它是项目一个基于promise的网络请求库,用于获取后端数据(fastmock网站可以让你在没有后端程序的源码情况下能真实地在线模拟ajax请求),是代码实验室管理源码前端常用的数据请求工具;

       antd-mobile:由蚂蚁金融团队推出的一个开源的react组件库,这个组件库拥有很多使用的组件;

       swiper:能实现触屏焦点图、触屏Tab切换、项目触屏轮播图切换等常用效果。源码

       styled-compenonts:真正的代码cssinjs,增强CSS以对React组件系统进行样式设置的结果,具有简单的动态样式、轻松维护等优点。

正文

       组件展示?

组件设计思路

       顶部:用flex布局,方便快捷(一切皆可flex)

       搜索栏:使用antd-mobile组件库的SearchBar,点击转跳到搜索页面

       图标轮播和轮播图:主要使用swiper进行设计,实现自动轮播效果

       底部栏:用fixed固定住

组件封装

       先对项目进行脚手架的建构(使用vite脚手架,使用起来快速方便)

npminit@viteja/app

       src下的卡五星 源码目录内容

       api:存放与数据相关的链接,组件所有的数据将会在这一个文件夹下的request.js中使用ajax进行数据请求

       assets:存放静态资源,font、image等

       components:放置重复使用的组件

       config:存放页面标题配置

       modules:配置页面自适应横竖屏

       pages:各个页面

       routes:页面的路由

搜索栏

       直接使用antd-mobile的SearchBar

importReactfrom'react'import{ SearchBar}from'antd-mobile'import{ Link}from'react-router-dom'import{ Wrapper}from'./style'

       exportdefaultfunctionSearch(){ return(

{ /*点击搜索框跳转搜索页面*/}

       )}```

数据请求

       前端页面数据的展示不能写死在代码里面,需要数据请求,fastmock则走入了我的视野,在线接口Mock工具fastmock?在线模拟ajax请求(fastmock在没有后端程序的情况下可以实现ajax请求,有需要的小伙伴可以去尝试)

       api文件夹下的request.js进行axios数据请求

importaxiosfrom'axios'exportconstgetBanners=()=>axios.get('/post/

Iconify - 这个网站收集了很多免费商用的图标,设计师和开发者的终极图标集

Iconify:设计师与开发者梦寐以求的图标宝库

       在Iconify的世界里,你将拥有超过十万枚高质量矢量图标,它们犹如无尽的宝藏,为你的江湖聊天室 源码设计和开发项目增添无尽的魅力。这个专门收集和整理图标资源的网站,无疑是设计师和开发者们的终极图标集。

       Iconify不仅规模庞大,收录了超过,个开源图标,而且保持着源源不断的更新。它的存在,就如同一个汇聚了全球专业设计师和开发者智慧的仓库,确保每一枚图标都经过精心挑选和优化,以满足高标准的设计和开发需求。

       创立于年的Iconify,由经验丰富的一键还原的源码开发者Vjacheslav Trushkin维护,他的匠心独具体现在每一个细节。网站的Web Component功能使得图标在HTML中使用变得轻而易举,无论是React、Vue还是Svelte,都能无缝融入。而且,设计师们也能在Figma、Sketch和Adobe XD等流行工具中找到相应的插件,实现无缝集成,提升工作效率。

       Iconify的搜索功能强大而直观,无论是翻阅图标库还是通过关键字搜索,都能快速定位到你需要的图标。选择后,你可以轻松调整颜色、大小,甚至进行镜像翻转,然后一键下载SVG或PNG文件。无论是直接使用还是将SVG代码嵌入项目,Iconify都提供了极大的便利。

       令人惊喜的是,Iconify不仅提供了 Remix icon 和 Feather Icon 等知名图标库,还有更多资源等你探索。这些图标几乎都是免费且开源的,每项资源都附有清晰的许可信息,确保你可以放心使用,无需担心版权问题。与那些仅限于个人使用的iconfont相比,Iconify无疑提供了更为可靠的资源选择。

       在Iconify的海洋中,你无需再为寻找完美的图标而烦恼。它不仅能满足你的日常设计需求,还能激发你的创作灵感。快来Iconify的网站,开启你的图标之旅吧!

       对于那些关心开源代码的人来说,Iconify的源码在作者的Github主页上随时可得,但真正重要的是,你可以尽情享受这些免费且可商用的图标,让它们成为你作品中不可或缺的元素。别忘了,选择开源和商用授权的图标,是确保项目合规,避免潜在风险的最佳选择。

       持续关注我们,我们将继续分享更多高质量的免费资源。Iconify,就是你设计和开发旅程中不可或缺的伙伴。

如何评价 React Native

       React native充分利用了Facebook的现有轮子,是一个很优秀的集成作品,并且我相信这个团队对前端的了解很深刻,否则不可能让Native code「退居二线」。

       å¯¹åº”到前端开发,整个系统结构是这样:

       JSX vs HTML

       CSS-layout vs css

       ECMAScript 6 vs ECMAScript 5

       React native View vs DOM

       æ— éœ€ç¼–译,我在第一次编译了ipa装好以后,就再也没更新过app,只要更新云端的js代码,reload一下,整个界面就全变了。

       å¤šæ•°å¸ƒå±€ä»£ç éƒ½æ˜¯JSX,所有Native组件都是标签化的,这对于前端程序员来说,降低了不少学习成本,也大大减少了代码量。不信你可以看看JSX编译后的代码。

       å¤ç”¨React系统,也减少了一定学习和开发成本,更重要的是利用了React里面的分层和diff机制。js层传给Native层的是一个diff后的json,然后由Native将这个数据映射成真正的布局视图。

       css-layout也是点睛之笔,前端可以继续用熟悉的类css方式来编写布局,通过这个工具转换成constrain布局。

       ç³»

       ç»Ÿåªæœ‰js-objc的单向调用,就是把原生UI组件的方法通过javascritcore或者webview(低版本iOS)映射到js中来,整个调用

       è¿‡ç¨‹æ˜¯å¼‚步的,这样的设计令React native可以让js运行在桌面chrome中,通过websocket连接Native

       code和桌面chrome,极大地方便了调试。对其中的机制Bang的一篇文章写得很详细,我就不拾人牙慧了:React Native通信机制详解 « bang’s blog 。但这样设计也会带来一些问题,后面说。

       ç‚¹æŒ‰æ“ä½œä¹Ÿè¢«æŠ½è±¡æˆäº†ä¸€ç»„组件(TouchableXXX),这种抽象方式是我在之前做类似工作中没有想到的。facebook还列出Native为什么和web「手感」不同的原因:实时的点按反馈和取消能力。React Native 这套相应机制设计得很完善,能像Native code那样控制整个点按操作的所有过程。

       Debug

       ç›¸å½“方便!修改了js以后,通过内建的nodejs

       watcher编译成bundle,在模拟器里面按cmd+r就可以看到效果。而且按cmd+d,可以打开一个chrome窗口,所有的js都移到了

       chrome里面运行,所以什么断点单步打调用栈,都不在话下。

       ä¸Šé¢çš„既是特点也是优点,下面说说缺点,或者应该说:「仍然遗留的问题」,在我看来,这个方案已经超越了Hybird方案。

       ç³»

       ç»Ÿä»ç„¶ï¼ˆä¸å¾—不)依赖原生组件暴露出来的组件和方法。举两个例子,ScrollView这个组件,在Native层是有大量事件

       çš„,scrollViewWillBeginDragging,

       scrollViewWillEndDragging,scrollViewDidEndDragging等等,这些事件在现有的版本都没有暴露,基本上

       åšä¸äº†ç»„件联动效果。另外,这个版本中有大量组件是iOS

       only的:ActivityIndicatorIOS、DatePickerIOS、NavigatorIOS、PickerIOS、

       SliderIOS、SwitchIOS、TabBarIOS、AlertIOS、AppStateIOS、LinkingIOS、

       PushNotificationIOS、StatusBarIOS、VibrationIOS,反过来看,剩余的都是一些抽象程度极强的基本组件。这

       æ ·ï¼Œç”¨æˆ·å¿…须在不同的平台下写两套代码,而且所有能力仍然强烈依赖 React native 开发人员暴露的接口。

       ç”±äºŽæœ€å¤–层是

       React,初次学习成本高,不像往常的Hybird方案,只要多学几个JS

       API就可以开始干活了。当然,React的确让后续开发变得简单了一些,这么一套外来的(基于iOS)、残缺不全的(css-layout)在

       React的包装下,的确显得不那么面目可憎了。

       å¦å¤–,React Native仍然很不完善。文档还不全,我基本上是看着他的示例代码完成的demo,集成到已有app的文档也是今天才出来。按照官方的说法,Android版本要到半年后才发布:Blog | React ,届时整个系统设计可能还会有很大的变化。

       PS,在使用Tabbar的时候,我惊喜的发现他们居然用了iconfont方案,我现在手头的项目中也有同样的实现,不过API怎么设计一直很头疼。结果,我发现他是这么写的:

       <TabBarItemIOS

        name="blueTab"

        icon={ _ix_DEPRECATED('favorites')}

       ....>

       åœ¨ _ix_DEPRECATED 的定义处,有一句注释: // TODO(nicklockwood): How can this fit our require system?

       ä»¥ä¸Šã€‚

       ä¸‹é¢æ˜¯ä¸€å‘¨å‰ï¼Œåœ¨React native还没开源的时候,通过反解ipa的一些分析过程,有兴趣的可以看看。

       ------------------------简单粗暴的分割线--------------------

       èƒŒæ™¯å’Œè°ƒç ”手段

       React

        Native还没开源,最近和组里兄弟「反编译」了Facebook Group(这个应用是用React

       Native实现的)的ipa代码,出来几百个JS文件,格式化一下,花了几天时间读了一下源码,对React

       Native的内部核心机制算是有了一个基本了解。

       React Native的核心实现:

       å…ˆç®€å•è¯´å‡ ç‚¹ï¼Œè¯¦ç»†çš„等回头更新。

       1. React Native里面没有webview,这货不是Hybrid app,里面执行JS是用的

       JavascriptCore。

       2. 再说React Native的核心,iOS Native code提供了十来个最基本核心的类(RCTDeviceEventEmitter、

       RCTRenderingPerf等)、或组件(RCTView、RCTTextField、RCTTextView、

       RCTModalFullscreenView等),然后由React Native的JS部分,组成二十来个基本组件(Popover、Listview等),交由上层的业务方来使用(THGroupView)。

       3. 就如他们在宣传时所说,他们实现了一套类似css的子集,用来解决样式问题,相当复杂和强大,靠这个才能将Native的核心组件组成JS层的基本组件再组成业务端的业务组件,应该是采用facebook/css-layout · GitHub的C语言版本实现的(在ppt中我们看到了类似flex-direction: column一类的代码,这个正是css-layout支持的语法)。

       4. 在React Native中,写JS的工程师解决的是「将基本组件拼装成可用的React组件」的问题,写Native Code的工程师解决的是「提供核心组件,提供足够的扩展性、灵活性和性能」的问题。

       React Native的设计考虑:

       ReactJS对React Native有着直接的影响(我没在生产环境中用过React,只看过代码&用过Angular,如果有误请指出)

       ReactJS里面有这样的设计:

       1. ReactJS 的大工厂入口createElement返回的不是某个实体DOM对象,而只是一个数组

       2. 通过源码中 ui/browser/ 目录中的代码,将这个数组转换成DOM

       3. 底层的渲染核心是可以更换的

       å¦å¤–,Facebook自己有JSX,css-layout等开源项目,基于这些,如果要做一个用 JS来开发Native app的东西,很自然就想到了一套最有效率的搞法:

       1. 将 ui/browser 里面的代码替换成一套 Native 的桥接JS(实际上,iOS版是通过

       injectGenericComponentClass方法,将核心组件的方法注入到JS里面 ),就直接复用React的MVVM,自动将数据映射到Native了

       2.

        Native

       code里面实现三组核心API,一组提供核心组件的API(create、update、delete),一组事件方法(ReactJS里面的

       EventEmitter ),一组对css进行解析(css-layout)以及返回Style的ComputedStyle(React

       Native里面叫meatureStyle)。

       è¿™æ ·ï¼Œç”¨ä¸Šäº†ReactJS本身的所有核心功能和设计思路,Native的开发也足够简单。

       é‚£ï¼ŒReact Native是什么?

       å…¶å®žè¿™ä¸œè¥¿ä»ŽNative开发来说,相当于重新发明了一个浏览器渲染引擎并且套一个React的壳,从Web开发角度来说,就是把原来React的后端换成了Native code来实现,就跟Flipboard最近搞的React Canvas 一样: Flipboard · GitHubreact-canvas

       React Native的优势和劣势::

       ä¼˜åŠ¿ç›¸å¯¹Hybird app或者Webapp:

       1. 不用Webview,彻底摆脱了Webview让人不爽的交互和性能问题

       2. 有较强的扩展性,这是因为Native端提供的是基本控件,JS可以自由组合使用

       3. 可以直接使用Native原生的「牛逼」动画(在FB Group这个app里面,面板滑出带一点果冻弹动,面板基于某个点展开这种动画随处可见,这种动画用Native code来做小菜一碟,但是用Web来做就难上加难)。

       ä¼˜åŠ¿ç›¸å¯¹äºŽNative app:

       1. 可以通过更新远端JS,直接更新app,不过这快成为各家大型Native app的标配了…

       åŠ£åŠ¿ï¼š

       1. 扩展性仍然远远不如web,也远远不如直接写Native code(这个不用废话解释了吧)

       2.

       ä»ŽNative到Web,要做很多概念转换,势必造成双方都要妥协。比如web要用一套CSS的阉割版,Native通过css-layout拿到最终样

       å¼å†è½¬æ¢æˆnative原生的表达方式(比如iOS的Constraint\origin\Center等属性),再比如动画。另外,若Android和

       iOS都要做相同的封装,概念转换就更复杂了。

       æ›´æ–°1:添加了React对React Native的影响。

       æ›´æ–°2:基本确定其使用了 css-layout,添加了对React Native的总结

       æ›´æ–°3: React native已经开源了: React Native,只有iOS版。我写了几个demo,简单看了看objc代码并和开源前的我们的一些结论(见后文)交叉验证。简单地从前端工程师和系统整体角度说一下React native的特点和优劣吧。

       æ›´æ–°4: 补充了几条优势和与前端开发的对照

三步将iconfont的任意icon以组件形式引入vue(vue3.0可用)

       第一步:创建一个Vue文件,并将所需的SVG代码复制到文件中。

       注意:某些源码可能包含未定义的属性,可以直接删除这些属性。

       第二步:在文件中引入SVG文件。

       第三步:直接使用SVG组件。

       备注:市面上有很多相关的组件,但它们可能不够简洁或者功能不够完善。采用这种方式可以满足大部分需求。