React组件设计-仿网易有道翻译主页
前言
React组件化开发非常有利于搭建项目,也提高了组件的代码复用性。由于频繁使用网易有道翻译这个软件,项目让我萌生出想要征服ta的源码冲动。开发过程中遇到了些许问题,代码flash程序源码下载页面还有很多功能还未完善,项目现在只有一个首页,源码后续功能持续完善中。代码
前期准备在组件页面成型之初需要几个开源组件库:
axios:它是项目一个基于promise的网络请求库,用于获取后端数据(fastmock网站可以让你在没有后端程序的源码情况下能真实地在线模拟ajax请求),是代码相册冲印源码前端常用的数据请求工具;
antd-mobile:由蚂蚁金融团队推出的一个开源的react组件库,这个组件库拥有很多使用的组件;
swiper:能实现触屏焦点图、触屏Tab切换、项目触屏轮播图切换等常用效果。源码
styled-compenonts:真正的代码cssinjs,增强CSS以对React组件系统进行样式设置的结果,具有简单的动态样式、轻松维护等优点。
正文组件展示?
组件设计思路顶部:用flex布局,方便快捷(一切皆可flex)
搜索栏:使用antd-mobile组件库的SearchBar,点击转跳到搜索页面
图标轮播和轮播图:主要使用swiper进行设计,实现自动轮播效果
底部栏:用fixed固定住
组件封装先对项目进行脚手架的建构(使用vite脚手架,使用起来快速方便)
npminit@viteja/appsrc下的按键挂源码目录内容
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组件。
备注:市面上有很多相关的组件,但它们可能不够简洁或者功能不够完善。采用这种方式可以满足大部分需求。
2024-12-28 19:01
2024-12-28 17:43
2024-12-28 17:28
2024-12-28 17:21
2024-12-28 16:29