首頁

這兩天火遍全球的沉浸式新媒體設(shè)計(jì),是如何讓想象力爆炸的?

資深UI設(shè)計(jì)者

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

在傳統(tǒng)行業(yè)打滾數(shù)年后的設(shè)計(jì)師,總是難以回避靈氣和匠氣的博弈,日常創(chuàng)作逐漸走入某種定式,失去了挑戰(zhàn) Brief 的膽量和與打破規(guī)則的底氣。與此同時(shí),異軍突起的新媒體互動設(shè)計(jì)卻似乎毫無包袱,以一股體驗(yàn)式的視覺狂潮快速站穩(wěn)了自己的商業(yè)位置,既保留了創(chuàng)意人的酷,也能為新型體驗(yàn)創(chuàng)造服務(wù)。

2012年,Random International 的作品《雨屋》正式開啟了大眾對沉浸式體驗(yàn)的認(rèn)識,近年隨著 teamLab、Punchdrunk 等互動體驗(yàn)展演的火爆,沉浸式新媒體設(shè)計(jì)不僅成為了炙手可熱的包裝概念,同時(shí)也透露出人們對于新型互動的好奇心與強(qiáng)需求。提起新媒體作品,我們通常會自動聯(lián)想到黑科技和腦洞,卻容易忽視這些作品除了具有前衛(wèi)的藝術(shù)性表征,同時(shí)也暗含著嚴(yán)謹(jǐn)而延展的設(shè)計(jì)內(nèi)核。

2019 年初夏,Mindpark 邀請了兩位數(shù)字媒體界的先鋒代表:Moment Factory與Studio Swine,和我們共同探討了沉浸式設(shè)計(jì)在商業(yè)性實(shí)踐與實(shí)驗(yàn)性探索上的思路與價(jià)值。

透過數(shù)字篝火,人們重聚在一起

總部位于蒙特利爾的 Moment Factory 是一家專業(yè)打造沉浸式互動體驗(yàn)設(shè)計(jì)的多媒體公司,以跨界和合作著稱的他們擁有一個超 350 人的龐大團(tuán)隊(duì)。自千禧年成立以來,MF 已經(jīng)成功打造了近 400 個場景設(shè)計(jì)商業(yè)項(xiàng)目,客戶包括微軟、索尼、NFL、麥當(dāng)娜等,形式從立體光雕、數(shù)據(jù)互動到空間展覽、演唱會工程都樣樣精通,幾乎每個作品在面世時(shí)都顛覆了人們對驚艷的定義。

△ Demo Reel ©?Moment Factory

Moment Factory 的業(yè)務(wù)主要分為三大模塊:內(nèi)容、互動與場景。植根于公眾場域創(chuàng)作的他們,善于根據(jù)場地的特點(diǎn)策劃和開發(fā)因地制宜的故事內(nèi)容,繼而在聲光電的效果設(shè)計(jì)上加強(qiáng)環(huán)境與人之間的聯(lián)結(jié),最后兩者結(jié)合形成互動閉環(huán)以構(gòu)造出全局的沉浸式體驗(yàn)。

△ ©?Moment Factory

Moment Factory 的工作流也基于這三大模塊多線程并行。與傳統(tǒng)行業(yè)不同的是,客戶對于 MF 而言并不是甲方爸爸,而是項(xiàng)目的共創(chuàng)者。他們會邀請客戶參與并確認(rèn)每一個設(shè)計(jì)環(huán)節(jié),一來可以增加客戶對項(xiàng)目的認(rèn)知與信任度,二是考慮到多媒體物料制作成本較高,也預(yù)防階段性推翻對項(xiàng)目進(jìn)程造成影響。

△ ©?Moment Factory

因地制宜的創(chuàng)造性內(nèi)容

「Aura」是 Moment Factory 耗時(shí)超過一年,動用超過 100 人團(tuán)隊(duì)制作的夢幻級沉浸式光雕作品。它集合了極其的視效投影技術(shù)及獨(dú)立打造的交響樂聲效,為蒙特利爾圣母大教堂打造了 40 分鐘震撼而靈動的超感官體驗(yàn)。

△ AURA ©?Moment Factory

基于天主教堂自身「誕生-受難-升天-審判」的故事脈絡(luò),AURA 的設(shè)計(jì)概念以 the Path of Light(光明之路)為主線,并根據(jù)建筑動線分為 the Birth of Light(光的誕生), the Obstacles(苦路),the Open Sky(升天)三個章節(jié)。

△ ©?Moment Factory

在確定故事線與情緒板同時(shí),考慮到教堂內(nèi)部結(jié)構(gòu)的復(fù)雜性及壁畫的還原準(zhǔn)確性,團(tuán)隊(duì)使用 3D 掃描重塑建筑模型,并進(jìn)行了大量的動效推演及真實(shí)光影測試,最終利用自研的工業(yè)投影體系,讓建筑實(shí)體與投影內(nèi)容的結(jié)合達(dá)到型與神的高度統(tǒng)一。

△ Behind the Scenes ©?Moment Factory

在細(xì)節(jié)的雕刻上,作品對主殿圣像的層級結(jié)構(gòu)進(jìn)行分解,營造出空間錯位的效果。另外也對苦路長廊的畫像進(jìn)行精準(zhǔn)投影,以光的擴(kuò)散作為線索,一步一步引導(dǎo)觀眾的視線,展開故事敘述。

△ Behind the Scenes©?Moment Factory

無論是故事設(shè)定還是效果設(shè)計(jì),Aura 都根據(jù)教堂題材順勢而為,在不破壞建筑原有氣質(zhì)的前提下,放大環(huán)境硬件中的可用元素,從而達(dá)到「概念-動線-效果」的全方位合一。視覺互動的起承轉(zhuǎn)合不但將觀眾的沉浸式體驗(yàn)最大化,同時(shí)也升華了圣母大教堂的神性與歷史精神。

環(huán)境與人的聯(lián)結(jié)

LAX 項(xiàng)目是 Moment Factory 在 2013 年為洛杉磯機(jī)場打造,以時(shí)間旅行為主題的商業(yè)項(xiàng)目。它既是全美最大的機(jī)場多媒體環(huán)境設(shè)計(jì)項(xiàng)目,也是品牌體驗(yàn)拓展的空間實(shí)驗(yàn)。

雖然洛杉磯機(jī)場整體以「時(shí)間旅行」作為品牌主題,但出發(fā)者和到達(dá)者的動線終歸不同:除了機(jī)場主體以外,旅客的體驗(yàn)還涉及到另外兩個環(huán)境——旅行目的地和洛杉磯。因此,本項(xiàng)目根據(jù)不同的觸點(diǎn)(登機(jī)口與到達(dá)大廳)針對性地設(shè)計(jì)了不同互動內(nèi)容,讓出發(fā)者與到達(dá)者都能找到與環(huán)境的聯(lián)結(jié)和延伸,使整個機(jī)場體驗(yàn)形成通路。

Moment Factory 為登機(jī)口都設(shè)計(jì)了實(shí)時(shí)更新的互動墻,不但能捕捉行人的動態(tài)并融入畫面,更能實(shí)時(shí)切換目的地的本土特色內(nèi)容作為動畫元素,使準(zhǔn)備出發(fā)的游客身未動而心先遠(yuǎn)。

△ THE PORTALS ©?Moment Factory

與登機(jī)口不同的是,到達(dá)大廳的巨幕內(nèi)容則根據(jù)機(jī)場的建筑結(jié)構(gòu)設(shè)計(jì),以跳水、跳躍等蒙太奇片段營造出洛杉磯愜意、清爽、驚喜的城市品牌形象;系列影片也同時(shí)在長廊和行李大廳中展映,以保持品牌語意的一致性與連續(xù)性。

△ WELCOME WALL©?Moment Factory

在機(jī)場中央,MF 團(tuán)隊(duì)還打造了一個呼應(yīng)主題的重點(diǎn)裝置——時(shí)間鐘樓。除了播放實(shí)時(shí)更新的故事短片外,設(shè)計(jì)師考慮到屏幕過于虛擬和冷感,故以機(jī)械咕咕鐘為靈感,讓鐘樓和環(huán)繞屏幕在準(zhǔn)點(diǎn)切換真人報(bào)時(shí)舞蹈,既達(dá)到提醒旅客時(shí)間的作用,也讓他們在候機(jī)的空隙獲得環(huán)抱式的娛樂化體驗(yàn)。

△ TIME TOWER ©?Moment Factory

從手稿到成型,LAX 項(xiàng)目歷時(shí) 16 個月,在三個大洲拍攝了超過 4 小時(shí)的視頻內(nèi)容。而且因?yàn)闄C(jī)場常年不能關(guān)閉,也極大增加了項(xiàng)目的施工與調(diào)試難度。

△ ©?Moment Factory

《通用設(shè)計(jì)法則》中曾提到,「沉浸」即是讓人專注于當(dāng)前環(huán)境,并在設(shè)計(jì)者提供的目標(biāo)情境中進(jìn)行互動而獲得愉悅,從而忘記真實(shí)環(huán)境的存在。Moment Factory 十分善于提取及串聯(lián)實(shí)體環(huán)境與觀眾之間的觸點(diǎn),利用不同的互動技術(shù)對每一個觸點(diǎn)進(jìn)行感官的復(fù)合強(qiáng)化,并以完整的敘事結(jié)構(gòu)對品牌進(jìn)行包裝,才屢屢在 Lumina、Kontinuum 等系列作品中打造出連貫又有趣的體驗(yàn)心流。

對互聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)而言,我們能調(diào)用的觸點(diǎn)也許僅有區(qū)區(qū)一屏,但用戶在獲取虛擬體驗(yàn)時(shí)的沉浸式感知卻和實(shí)境式體驗(yàn)是相似的,因此設(shè)計(jì)師也可以參考以下幾點(diǎn):

  • 利用五感塑造場景:不僅從視覺層雕琢,更要調(diào)動觸覺(設(shè)備震動、阻尼感)、聽覺(聲效、音樂、聲場)等感官以模擬真實(shí)世界中的物理反應(yīng),打破虛擬環(huán)境和實(shí)境的時(shí)差和次元壁。
  • 減少環(huán)境干擾項(xiàng):收起不必要操作,最大化界面視野,讓用戶盡可能全程聚焦在目標(biāo)場景。
  • 強(qiáng)化敘事性引導(dǎo):利用開屏動畫、轉(zhuǎn)場動效、角色故事等元素增加場景代入感并進(jìn)行自然過渡。
  • 即時(shí)性反饋:給予用戶簡單而反饋感強(qiáng)的任務(wù),以延續(xù)他們對互動的把控感和積極性,從而增加用戶在環(huán)境中逗留的時(shí)間和意愿。

We do it in the public. We bring people together.

過去,由于娛樂產(chǎn)品的復(fù)制成本較高,人們大都以群體形式到電影院或劇院里進(jìn)行活動,因此促進(jìn)了社交互動與環(huán)境共融。但隨著媒介的升級,娛樂不僅從大眾走向個人,同時(shí)也將個人和群體進(jìn)行隔離,使個人和社群、環(huán)境之間的互通性越來越弱。Moment Factory 堅(jiān)持在公共場域中探索新型的體驗(yàn)形式,正是因?yàn)樗麄儓?jiān)信娛樂活動雖然可以由個人進(jìn)行,但沉浸式的情感體驗(yàn)仍舊需要透過真實(shí)環(huán)境下的社交互動來完成。利用數(shù)字篝火為體驗(yàn)設(shè)計(jì)融合升溫,才能讓人們真正地共聚與共享真實(shí)的情感和生活。

用轉(zhuǎn)瞬即逝創(chuàng)造世界

如果說 Moment Factory 利用新媒體在環(huán)境創(chuàng)意、娛樂性與商業(yè)價(jià)值之中找到了發(fā)展的平衡,Studio Swine 則是利用新媒體設(shè)計(jì)的實(shí)驗(yàn)性為人們開辟了觀察世界的全新角度。

Studio Swine 中的「SWINE」全稱是 Super Wide Interdisciplinary New Explorers,意味著無限跨界與探索主義。它由新派英國藝術(shù)家 Alexander Groves 及日本建筑師 Azusa Murakami 于 2011年創(chuàng)立,作品領(lǐng)域涵蓋思辨設(shè)計(jì)、裝置藝術(shù)、電影、雕塑等。他們的創(chuàng)作以獨(dú)特的世界觀、空間感及美學(xué)體系征服了世界各大頂尖藝術(shù)展覽,倫敦V&A博物館、巴黎蓬皮杜藝術(shù)中心與威尼斯雙年展等都曾邀請他們展出。

△ ©?Studio Swine

在西方,越來越多像 Studio Swine 這種設(shè)計(jì)師團(tuán)隊(duì)選擇以跨界的形式進(jìn)行研究及創(chuàng)作,他們也不再拘泥于設(shè)計(jì)與藝術(shù)之間的所謂界限,逐漸衍生出了新的設(shè)計(jì)流派與理論。傳統(tǒng)行業(yè)的設(shè)計(jì)焦點(diǎn)往往會落在商業(yè)策略與 Design Thinking 上,而新形態(tài)的設(shè)計(jì)則更多地向批判性與未來性上傾斜。

△ An Unresolved Mapping of Speculative Design ©?Elliott P Montgomery | EPMID.COM

2013 年前后,英國設(shè)計(jì)師 Anthony Dunne 和 Fiona Raby 提出了 Speculative Design(思辨性設(shè)計(jì))來概括此類在藝術(shù)與設(shè)計(jì)之間的交疊學(xué)科。對比起傳統(tǒng)設(shè)計(jì)基于現(xiàn)有場景來解決現(xiàn)有問題,思辨性設(shè)計(jì)旨在擴(kuò)充場景的可能性,以引導(dǎo)人們想象和思考未來社會生活、生產(chǎn)的狀態(tài)或矛盾。Speculative Design 以設(shè)計(jì)作為跨領(lǐng)域的思維實(shí)驗(yàn)及方法,不僅突破了媒介、工藝的疆域,選題上也常常挑戰(zhàn)甚至跳脫社會倫理、文化定式、現(xiàn)世哲學(xué)的桎梏,而這種敢為人先的創(chuàng)作理念也是此類作品爭議性的源頭。

△ Redrawn from Speculative Design Practice ©? Ivica Mitrovi? | Speculative.hr

NEW SPRING

New Spring 是 Studio Swine 與 COS 合作的裝置互動項(xiàng)目,作品以意大利建筑的拱廊結(jié)構(gòu)及櫻花樹在四季中的形態(tài)為意象設(shè)計(jì),并將氣泡比喻花的綻放與凋亡,旨在討論時(shí)間與物質(zhì)的瞬息性。在創(chuàng)作伊始,設(shè)計(jì)師提出了一個假設(shè)場景:在未來,物質(zhì)將越來越多,而空間越來越少,植物與園林可能朝著機(jī)械化、人工化的方向發(fā)展,那么我們要怎么去模擬四季變化下生物從生到滅的過程呢?

△ COS x NEW SPRING ©?Studio Swine

為了全感官地營造未來園林的場景感與沉浸感,除了櫻花樹的意境外,Studio Swine 更與化學(xué)家合作,研制出帶有混合香味且不會立即爆破的氣泡,為互動者帶來意料之外的觸感體驗(yàn)。在聽覺上,編曲家 Gavin Singleton 也特意為展覽場景打造了專屬的音樂EP。

△ ©?Studio Swine

2018年,Swine Swine 再度利用氣泡作為原型,以世界上最小且最古老的生物之一——藍(lán)細(xì)菌的光合供氧為主題,制作了高達(dá) 9 米的大型環(huán)境裝置 Infinity Blue 來模擬地球大氣層的歷史,禮贊藍(lán)細(xì)菌賜予了地球第一口呼吸。雕塑中內(nèi)嵌 32 個旋渦氣孔不斷噴發(fā)出圈裝煙霧,用以比喻光合作用生產(chǎn)氧氣的過程。

△ Infinity Blue ©?Studio Swine

HAIR HIGHWAY

和場景設(shè)計(jì)不同,影片同樣也是另一種常見的沉浸式表現(xiàn)手法。近幾年越來越多的新媒體作品采用紀(jì)錄電影、開放式互動短劇、VR 短片等形式對作品進(jìn)行呈現(xiàn):一是影片能突破作品篇幅,更全貌地介紹項(xiàng)目背后的概念與調(diào)研故事;二來基于自媒體環(huán)境的蓬勃,作品能以較低的復(fù)制成本獲得更高的傳播度;三則是影片天然的敘事結(jié)構(gòu)能快速激活觀眾的代入感。

Hair Highway(絲綢之路)是以紀(jì)錄片與家具設(shè)計(jì)復(fù)合呈現(xiàn)的極富爭議性的新媒體實(shí)驗(yàn)。Studio Swine 意識到在自然資源逐漸減少的情況下,人類毛發(fā)作為一種代謝物質(zhì),也許可以成為新型的可再生資源?;谶@個洞察,他們嘗試以頭發(fā)作為原料去創(chuàng)造一種近似木料的全新媒材,以挑戰(zhàn)現(xiàn)有的美學(xué)標(biāo)準(zhǔn)和詮釋物質(zhì)的可能性。

△ Hair Highway ©?Studio Swine

亞洲人頭發(fā)的生長速度是熱帶硬木的 16 倍,而中國作為熱帶硬木最大的進(jìn)口國也是人類毛發(fā)最大的出口國,因此也被他們選為了項(xiàng)目的起源地。兩人在創(chuàng)作過程中不僅探訪了 9 個位于山東的假發(fā)工廠,更拍攝大量假發(fā)制作的工序與買賣流程作為紀(jì)錄片的生態(tài)調(diào)研資料。

△ ©?Studio Swine

Hair Highway 以絲綢為概念,用樹脂封印毛發(fā)制作出一種模擬琥珀、玳瑁紋理的板材,并糅合清代及上海 20 年代裝飾主義的紋理設(shè)計(jì)與西方抽象幾何的輪廓特征,創(chuàng)造出了一套極具古典神韻的系列家飾。

△ ©?Studio Swine

不破不立,Studio Swine 的作品始終緊扣著三個思辨性的特征:探索時(shí)間性、想象未來社會的形態(tài)、創(chuàng)造新型的物質(zhì)組合,以新銳的角度挑動人們的思維的底線,而量產(chǎn)和商業(yè)化卻從不是他們眼中的第一要義?;蛟S怪誕,或許不安,但設(shè)計(jì)在他們的哲學(xué)里只是一條探索世界的未竟之路,而不是一個實(shí)用主義誕下的結(jié)果。

新媒體的特點(diǎn)之一,就是他基于時(shí)間的藝術(shù)形式。新媒體的表現(xiàn)很多都是時(shí)間累積的縮影,每一幀,每一個圖層,每一個數(shù)據(jù)庫的建立,以及觀眾在與之互動的時(shí)候也同時(shí)在進(jìn)行一個時(shí)間的旅行。我希望互動是更加內(nèi)隱和內(nèi)省的,而不是僅僅基于科技的娛樂程度?!旅襟w策展人 Richard Castelli

從對娛樂效果喜聞樂見,對創(chuàng)作理念心悅誠服,再到如今被作品激活出新的靈感、批判或討論,受眾與作品之間的互動升維或許才是創(chuàng)作者最樂意觀望的局面。沉浸式新媒體設(shè)計(jì)為人們提供了孵化情感和思想的超感官空間,而互動場域中的人才是成就作品的最終環(huán)節(jié)。

真正的沉浸是思維的沉浸,環(huán)境的營造只是想象力的引路人。

藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì)  包裝設(shè)計(jì) 、 圖標(biāo)定制  用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)

淺入 React 生命周期相關(guān)(二)更新生命周期

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里


更新階段分為兩部分 父組件執(zhí)行 render 或者調(diào)用 this.setState。

componentWillReceiveProps
大部分網(wǎng)上教程為外部 props 發(fā)生改變才觸發(fā) componentWillReceiveProps,其實(shí)不是,當(dāng)父組件進(jìn)入 render 時(shí),無論子組件的 props 發(fā)沒發(fā)生改變,都會執(zhí)行該生命周期函數(shù)。 
函數(shù)參數(shù)有一個,為 nextProps,為將要新的 props。 
值得注意的是,在整個更新階段的生命周期函數(shù),只有在此函數(shù)內(nèi)可以調(diào)用 this.setState 方法,當(dāng)然其他也可以調(diào)用,但是會造成死循環(huán) 。

shouldComponentUpdate
該函數(shù)需要返回值,如沒定義則默認(rèn)返回 true。當(dāng)返回值為 true 時(shí),進(jìn)入 componentWillIpdate ,如為 false ,則什么都不發(fā)生。所以說這是一個可以進(jìn)行 React 性能優(yōu)化的地方。函數(shù)參數(shù)有兩個 nextProps 和 nextState。我們需用做的就是在 this.props、this.state、nextState、nextProps之間進(jìn)行對比,來解決重復(fù)渲染的目的。

componentWillUpdate
如果 shouldComponentUpdate 返回值為 true 的話,生命周期會進(jìn)入該函數(shù)中。在這個函數(shù)中我們可以根據(jù)實(shí)際情況做一些事情,但是不能調(diào)用 this.setState。

render
在更新階段的 render 來講一講 調(diào)和 過程。 render 返回的 JSX 標(biāo)簽會保存在內(nèi)存中,react 會通過 diff 算法來計(jì)算出最小化改動完成差異的更新。diff 是逐層遞歸比較,首先比較類型是否一樣。如果發(fā)現(xiàn) <div>和 <span> 的差別的話,react 會選擇直接放棄之前的 dom 元素, 重新渲染。所以說即使是更新階段的調(diào)和過程,也會觸發(fā)組件的掛載、卸載階段。

componentDidUpdate
在這個時(shí)候已經(jīng)更新完 dom 結(jié)構(gòu),可以重新使用 dom 操作。

總結(jié)
總體來說更新的生命周期要做的最重要的事情就是性能優(yōu)化,減少重復(fù)渲染次數(shù)。 
在這個方面已經(jīng)有很多成熟的解決方法了,在我的博客中也會介紹如何定制更新階段的生命周期函數(shù)。 
在使用上,最最重要的一點(diǎn)就是不要在除了 componentWillReceiveProps 之外的其他更新階段生命周期函數(shù)內(nèi)調(diào)用 this.setState。

相關(guān)鏈接:

淺入 React 生命周期相關(guān)(一)掛載生命周期
--------------------- 

重新學(xué)習(xí) React (一) 生命周期,F(xiàn)iber 調(diào)度和更新機(jī)制

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

前幾天面試問道 react 的相關(guān)知識,對我打擊比較大,感覺對 react 認(rèn)識非常膚淺,所以在這里重新梳理一下,想想之前沒有仔細(xì)思考過的東西。

另外有說的不對的地方還請幫我指正一下,先謝謝各位啦。

目錄索引:

什么是生命周期和調(diào)度?

React 有一套合理的運(yùn)行機(jī)制去控制程序在指定的時(shí)刻該做什么事,當(dāng)一個生命周期鉤子被觸發(fā)后,緊接著會有下一個鉤子,直到整個生命周期結(jié)束。

生命周期

生命周期代表著每個執(zhí)行階段,比如組件初始化,更新完成,馬上要卸載等等,React 會在指定的時(shí)機(jī)執(zhí)行相關(guān)的生命周期鉤子,使我們可以有機(jī)在程序運(yùn)行中會插入自己的邏輯。

調(diào)度

我們寫代碼的時(shí)候往往會有很多組件以及他們的子組件,各自調(diào)用不同的生命周期,這時(shí)就要解決誰先誰后的問題,在 react v16 之前是采用了遞歸調(diào)用的方式一個一個執(zhí)行,而在現(xiàn)在 v16 的版本中則采用了與之完全不同的處理(調(diào)度)方式,名叫 Fiber,這個東西 facebook 做了有兩年時(shí)間,實(shí)現(xiàn)非常復(fù)雜。

具體 Fiber 它是一個什么東西呢?不要著急,我們先從最基本的生命周期鉤子看起。

React 生命周期詳解

首先看一下 React V16.4 后的生命周期概況(圖片來源

 

 

  • 從橫向看,react 分為三個階段:
    • 創(chuàng)建時(shí)
      • constructor() - 類構(gòu)造器初始化
      • static getDerivedStateFromProps() - 組件初始化時(shí)主動觸發(fā)
      • render() - 遞歸生成虛擬 DOM
      • componentDidMount() - 完成首次 DOM 渲染
    • 更新時(shí)
      • static getDerivedStateFromProps() - 每次 render() 之前執(zhí)行
      • shouldComponentUpdate() - 校驗(yàn)是否需要執(zhí)行更新操作
      • render() - 遞歸生成虛擬 DOM
      • getSnapshotBeforeUpdate() - 在渲染真實(shí) DOM 之前
      • componentDidUpdate() - 完成 DOM 渲染
    • 卸載時(shí)
      • componentWillUnmount() - 組件銷毀之前被直接調(diào)用

一些干貨

  • 有三種方式可以觸發(fā) React 更新,props 發(fā)生改變,調(diào)用 setState() 和調(diào)用 forceUpdate()
  • static getDerivedStateFromProps() 這個鉤子會在每個更新操作之前(即使props沒有改變)執(zhí)行一次,使用時(shí)應(yīng)該保持謹(jǐn)慎。
  • componentDidMount() 和 componentDidUpdate() 執(zhí)行的時(shí)機(jī)是差不多的,都在 render 之后,只不過前者只在首次渲染后執(zhí)行,后者首次渲染不會執(zhí)行
  • getSnapshotBeforeUpdate() 執(zhí)行時(shí)可以獲得只讀的新 DOM 樹,此函數(shù)的返回值為 componentDidUpdate(prevProps, prevState, snapshot) 的第三個參數(shù)

嘗試?yán)斫?Fiber

關(guān)于 Fiber,強(qiáng)烈建議聽一下知乎上程墨Morgan的 live 《深入理解React v16 新功能》,這里潛水員的例子和圖片也是引用于此 live。

背景

我們知道 React 是通過遞歸的方式來渲染組件的,在 V16 版本之前的版本里,當(dāng)一個狀態(tài)發(fā)生變更時(shí),react 會從當(dāng)前組件開始,依次遞歸調(diào)用所有的子組件生命周期鉤子,而且這個過程是同步執(zhí)行的且無法中斷的,一旦有很深很深的組件嵌套,就會造成嚴(yán)重的頁面卡頓,影響用戶體驗(yàn)。

React 在V16版本之前的版本里引入了 Fiber 這樣一個東西,它的英文涵義為纖維,在計(jì)算機(jī)領(lǐng)域它排在在進(jìn)程和線程的后面,雖然 React 的 Fiber 和計(jì)算機(jī)調(diào)度里的概念不一樣,但是可以方便對比理解,我們大概可以想象到 Fiber 可能是一個比線程還短的時(shí)間片段。

Fiber 到底做了什么事

Fiber 把當(dāng)前需要執(zhí)行的任務(wù)分成一個個微任務(wù),安排優(yōu)先級,然后依次處理,每過一段時(shí)間(非常短,毫秒級)就會暫停當(dāng)前的任務(wù),查看有沒有優(yōu)先級較高的任務(wù),然后暫停(也可能會完全放棄)掉之前的執(zhí)行結(jié)果,跳出到下一個微任務(wù)。同時(shí) Fiber 還做了一些優(yōu)化,可以保持住之前運(yùn)行的結(jié)果以到達(dá)復(fù)用目的。

舉個潛水員的例子

我們可以把調(diào)度當(dāng)成一個潛水員在海底尋寶,v16 之前是通過組件遞歸的方式進(jìn)行尋寶,從父組件開始一層一層深入到最里面的子組件,也就是如下圖所示。

 

 

 

而替換成了 Fiber 后,海底變成的狹縫(簡單理解為遞歸變成了遍歷),潛水員會每隔一小段時(shí)間浮出水面,看看有沒有其他尋寶任務(wù)。注意此時(shí)沒有尋到寶藏的話,那么之前潛水的時(shí)間就浪費(fèi)了。就這樣潛水員會一直下潛和冒泡,具體如下圖所示。

 

 

 

引入 Fiber 后帶來的三個階段

從生命周期那張圖片縱向來看,F(xiàn)iber 將整個生命周期分成了三個階段:

  • render 階段
    • 由于 Fiber 會時(shí)不時(shí)跳出任務(wù),然后重新執(zhí)行,會導(dǎo)致該階段的生命周期調(diào)用多次的現(xiàn)象,所以 React V16 之前 componentWillMount()componentWillUpdate(),componentWillReceiveProps() 的三個生命周期鉤子被加上了 UNSAFE 標(biāo)記
    • 這個階段效率不一定會比之前同步遞歸來的快,因?yàn)闀腥蝿?wù)跳出重做的性能損耗,但是從宏觀上看,它不斷執(zhí)行了最高優(yōu)先級(影響用戶使用體驗(yàn))的任務(wù),所以用戶使用起來會比以前更加的流暢
    • 這個階段的生命周期鉤子可能會重復(fù)調(diào)用,建議只寫無副作用的代碼
  • pre-commit 階段
    • 該階段 DOM 已經(jīng)形成,但還是只讀狀態(tài)
    • 這個階段組件狀態(tài)不會再改變
  • commit 階段
    • 此時(shí)的 DOM 可以進(jìn)行操作
    • 這個階段組件已經(jīng)完成更新,可以寫一些有副作用的代碼和添加其它更新操作。

簡而言之:以 render() 為界,之前執(zhí)行的生命周期都有可能會打斷并多次調(diào)用,之后的生命周期是不可被打斷的且只會調(diào)用一次。所以盡量把副作用的代碼放在只會執(zhí)行一次的 commit 階段。

其它生命周期鉤子

除了上面常用的鉤子,React 還提供了如下鉤子:

  • static getDerivedStateFromError() 在 render 階段執(zhí)行,通過返回 state 更新組件狀態(tài)
  • componentDidCatch() 在 commit 階段執(zhí)行,可以放一些有副作用的代碼

更新機(jī)制

理解了生命周期和三個執(zhí)行階段,就可以比較容易理解組件狀態(tài)的更新機(jī)制了。

setState()

這個方法可以讓我們更新組件的 state 狀態(tài)。第一個參數(shù)可以是對象,也可以是 updater 函數(shù),如果是函數(shù),則會接受當(dāng)前的 state 和 props 作為參數(shù)。第二個參數(shù)為函數(shù),是在 commit 階段后執(zhí)行,準(zhǔn)確的說是在 componentDidUpdate() 后執(zhí)行。

setState() 的更新過程是異步的(除非綁定在 DOM 事件中或?qū)懺?setTimeout 里),而且會在最后合并所有的更新,如下:

Object.assign( previousState,
  {quantity: state.quantity + 1},
  {quantity: state.quantity + 1},
  ...
)
復(fù)制代碼

之所以設(shè)計(jì)成這樣,是為了避免在一次生命周期中出現(xiàn)多次的重渲染,影響頁面性能。

forceUpdate()

如果我們想強(qiáng)制刷新一個組件,可以直接調(diào)用該方法,調(diào)用時(shí)會直接執(zhí)行 render() 這個函數(shù)而跳過 shouldComponentUpdate()。

舉個極端例子

function wait() { return new Promise(resolve => {
    setTimeout(() => {
      resolve(); console.log("wait");
    }, 0);
  });
} //......省略組件創(chuàng)建 async componentDidMount() { await wait(); this.setState({ name: "new name" }); console.log("componentDidMount");
}

componentDidUpdate() { console.log("componentDidUpdate");
}

render() { console.log(this.state); return null } //......省略組件創(chuàng)建 // 輸出結(jié)果如下 // wait // {name: "new name"} // componentDidUpdate // componentDidMount // 注意 componentDidUpdate 的輸出位置,一般情況下 // componentDidUpdate 都是在componentDidMount 后面 // 執(zhí)行的,但是這里因?yàn)閟etState 寫在了 await 后面 // 所以情況相反。 復(fù)制代碼

結(jié)語

了解 react 生命周期和更新機(jī)制確實(shí)有利于編寫代碼,特別是當(dāng)代碼量越來越大時(shí),錯用的 setState 或生命周期鉤子都可能埋下越來越多的雷,直到有一天無法維護(hù)。。。

我的個人建議如下:

  • 把副作用代碼通通放在 commit 階段,因?yàn)檫@個階段不會影響頁面渲染性能
  • 盡可能不要使用 forceUpdate() 方法,借用 Evan You 的一句話,如果你發(fā)現(xiàn)你自己需要在 Vue 中做一次強(qiáng)制更新,99.9% 的情況,是你在某個地方做錯了事
  • 只要調(diào)用了 setState() 就會進(jìn)行 render(),無論 state 是否改變
  • 知道 setState() 更新的什么時(shí)候是同步的,什么時(shí)候是異步的,參見上文
  • 不要把 getDerivedStateFromProps() 當(dāng)成是 UNSAFE_componentWillReceiveProps() 的替代品,因?yàn)?nbsp;getDerivedStateFromProps() 會在每次 render() 之前執(zhí)行,即使 props 沒有改變




藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)。

移動端和PC端交互設(shè)計(jì)上的區(qū)別

資深UI設(shè)計(jì)者


如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

這篇文章我們來談?wù)?strong>移動端和PC端交互設(shè)計(jì)上的區(qū)別。



Image title


經(jīng)常遇到一些設(shè)計(jì)師,他們之前負(fù)責(zé)的都是pc端產(chǎn)品,突然改做移動端,會不自覺的把pc端的一些設(shè)計(jì)理念“移植”到移動端,出現(xiàn)了水土不服。有經(jīng)驗(yàn)的設(shè)計(jì)師一看你設(shè)計(jì)的移動端頁面就知道你之前做的都是pc端,這是一件非常尷尬的事情。就好像你說了一句“nice to meet you”,別人就知道你老家是哪里一樣。那么移動端和pc端交互設(shè)計(jì)上的區(qū)別究竟在哪呢?



大屏到小屏


開門見山,移動端和pc端最根本的區(qū)別就是屏幕的大小。屏幕的大小直接決定了界面信息量,pc端一個頁面可以展示完全的信息可能需要移動端好幾個頁面來承載。


Image title


可能有的設(shè)計(jì)師覺得,屏幕尺寸不一樣做自適應(yīng)不就行了,移動端頁面做長一點(diǎn),讓用戶滑動就可以了。這是一個非常簡單的處理方案,但是忽略了一個重要前提:用戶愿不愿意滑動?根據(jù)埋點(diǎn)數(shù)據(jù)顯示,多數(shù)移動端頁面超過一屏的內(nèi)容的曝光與點(diǎn)擊量會急劇下滑,說明用戶很少主動滑動去查看一屏以外的內(nèi)容。對于移動端產(chǎn)品來說,一些重要的內(nèi)容必須保證用戶在一屏內(nèi)可以看到。


1)信息架構(gòu)重構(gòu)


因此,如果你要為一個pc端網(wǎng)站做一個移動端app,首先要做的就是信息架構(gòu)的重構(gòu)。pc端有足夠的空間可以把所有的功能直接展示給用戶,而移動端只能展示一些主要的功能,一些次要的功能需要放在下一層級。


Image title


例如,appstore中用戶是可以評價(jià)這條評論對自己是否有幫助的。PC端的處理方式很簡單,直接展示給用戶。而移動端是需要用戶長按這條評論才可以彈出評價(jià)列表的,可能很多用戶今天看了這篇文章才發(fā)現(xiàn)原來還有這個功能。沒關(guān)系,之前雖然不知道,但是并沒有影響你正常使用啊。對次要功能進(jìn)行適當(dāng)?shù)慕档托畔蛹壥且苿佣嗽O(shè)計(jì)師必須要考慮的。


2)一個頁面,一個任務(wù)


對于上面信息架構(gòu)重構(gòu)的觀點(diǎn)可能會有人存在異議,對于一些表單類頁面來說,例如用戶要借錢、轉(zhuǎn)賬,有些信息是用戶必須要填的。在這些場景中,我們不擔(dān)心用戶不滑動,因?yàn)橛脩舨换瑒泳蜔o法完成操作。那么在這種情況下,是否可以繼續(xù)延續(xù)pc端的布局樣式?


Image title


以上面的轉(zhuǎn)賬流程為例,pc端是直接在一個頁面展示,而移動端是分成了兩個頁面。為什么這樣?把備注/付款說明也放在第一個頁面不行嗎?


因?yàn)橐苿佣擞脩羰褂铆h(huán)境更加的復(fù)雜多變,更容易受到干擾,所以必須保證界面信息的簡單直觀。如果在一個頁面中展示過多的信息量,容易讓用戶混亂。這里所說信息量并不是指絕對信息量,更準(zhǔn)確的說法應(yīng)該是用戶主觀感受上的信息量。同樣的幾個輸入框,可能在pc端只占了頁面的1/4,而移動端占了一整個頁面,給用戶的感觀是完全不一樣的。頁面塞的滿滿當(dāng)當(dāng),容易讓用戶焦慮。


一個頁面可以完成的任務(wù)現(xiàn)在要跳轉(zhuǎn)好幾個頁面,增加了操作步驟。用戶害怕“內(nèi)容多”,難道不害怕“步驟多”嗎?不害怕,因?yàn)轫撁鎯?nèi)容量是用戶一眼就可以看出來的,用戶無法立刻感知這個任務(wù)有多少步驟。因?yàn)闊o知,所以無畏。等到用戶知道這個任務(wù)步驟數(shù)的時(shí)候,整個任務(wù)都已經(jīng)完成了。


Image title


借唄的這次改版,用戶要借錢必須先輸入借款金額,其余的借款期限還款方式利息等信息才會展示給用戶。這些信息都是跟用戶借款金額相關(guān)的,用戶沒有輸入借款金額,這些信息展示給用戶意義也不大,不如隱藏,讓用戶的注意力聚焦于完成輸入借款金額。


Image title


沒有一個放之四海而皆準(zhǔn)的設(shè)計(jì)原則,所有的設(shè)計(jì)理論都不能罔顧實(shí)際的應(yīng)用場景而機(jī)械的套用。如果前后步驟關(guān)聯(lián)性比較強(qiáng),我建議不要分頁展示。例如,目前很多的短信驗(yàn)證碼都選擇把“輸入手機(jī)號”“輸入短信驗(yàn)證碼”放到兩個頁面,我個人對此持保留意見。設(shè)想一個場景,如果用戶遲遲沒有收到短信驗(yàn)證碼,那么他需要確定是手機(jī)號輸錯了、網(wǎng)絡(luò)故障還是其他什么原因。用戶需要返回到上一個頁面查看,如果手機(jī)號和短信驗(yàn)證碼放在同一個頁面就簡單多了。


3)突出重要信息


前面我們提到的主要是控制移動端頁面的信息量。頁面信息量少就可以了?當(dāng)然不是,我們來看一下火車換乘的場景,如果你要從南京去新疆阿克蘇,沒有直達(dá)的車次,只能從西安換乘。我們來看看下面兩款產(chǎn)品的處理方式,左邊是12306,右邊是飛豬。12306還是一股pc端風(fēng)格迎面撲來,問題出現(xiàn)在哪?12306跟飛豬展示信息量差不多,唯一的區(qū)別在于12306展示了兩趟車次各自的起止時(shí)間,而飛豬只告訴用戶整趟旅程的起止時(shí)間。


Image title


顯然問題不是出現(xiàn)在信息量上,而是對信息的展示形式上。用戶更關(guān)注的信息,應(yīng)該讓用戶更容易發(fā)現(xiàn)。對于一趟車次來說,用戶更加關(guān)注出發(fā)/到達(dá)站、出發(fā)/到達(dá)時(shí)間票價(jià)。對飛豬界面進(jìn)行高斯模糊處理,發(fā)現(xiàn)用戶的視覺焦點(diǎn)正好落在這些重點(diǎn)信息上。


Image title


12306所有的信息都屬于同一層級,讓人抓不到主次。而且界面中出現(xiàn)了過多的配色,更增加用戶的信息獲取成本。


Image title




鼠標(biāo)到手指


pc端用戶與界面進(jìn)行交互靠的是鼠標(biāo),移動端用戶靠的是手指。鼠標(biāo)的操作更加精準(zhǔn),因此移動端界面中元素的尺寸和間距比pc端的大。以下圖為例,左邊是pc端,右邊是移動端。移動端的輸入框沿用的還是pc端樣式,而且關(guān)于利率和手續(xù)費(fèi)的詳情icon過小,用戶的手指點(diǎn)擊的時(shí)候容易誤操作。


Image title



給你的界面做減法


前面我們主要強(qiáng)調(diào)了移動端產(chǎn)品要盡量減少界面中信息量??刹豢梢栽诓桓淖儺a(chǎn)品信息架構(gòu)的前提下,通過交互設(shè)計(jì)上的改動來完成目標(biāo)呢?我給大家介紹兩個方法:場景化關(guān)聯(lián)化


1)場景化


在一個頁面中,雖然內(nèi)容很多,但是用戶真正感興趣并且會與之交互的內(nèi)容很少。如果我們可以獲知用戶在特定的場景下對于某個內(nèi)容訴求很高,那么我們突出展示;反之如果訴求很低的話,我們可以隱藏。


舉一個之前說過的例子,知乎中,用戶在搜索結(jié)果頁滑動大概3屏后,會出現(xiàn)“向知友提問”按鈕。因?yàn)橛脩艋瑒恿?屏,說明用戶可能對當(dāng)前的搜索結(jié)果不滿意,這時(shí)引導(dǎo)用戶去提問,用戶的意愿更高。如果我們?nèi)陶故具@個去提問按鈕,反而會減少用戶的實(shí)際瀏覽區(qū)域,造成干擾。


Image title


上面主要提到了,同一個流程,需要根據(jù)用戶不同的使用場景提供不同的功能。其實(shí)即使是同一個功能,我們也要根據(jù)用戶不同的使用場景選擇不同的展示形式。


Image title


還是知乎,為了方便用戶可以快速的查看下一個回答,給用戶提供了一個浮動按鈕。但是這個浮動按鈕,當(dāng)用戶開始滑動頁面時(shí)候就會改變樣式。這個很容易理解,當(dāng)用戶剛進(jìn)入這個頁面,為了降低用戶的學(xué)習(xí)成本,我們需要直接告訴用戶這個按鈕是干什么的。當(dāng)用戶開始滑動進(jìn)入閱讀答案的狀態(tài),縮小按鈕的形態(tài)避免對界面信息造成遮擋。


2)關(guān)聯(lián)化


我們需要梳理信息之間的關(guān)聯(lián)性,將相互關(guān)聯(lián)的信息整合在一起,進(jìn)而減少頁面中信息量。支付寶賬單的月份篩選功能,對入口進(jìn)行了修改。之前用戶需要點(diǎn)擊日歷圖標(biāo),現(xiàn)在用戶直接點(diǎn)擊月份就可以了。用戶要篩選的就是月份,那么直接把月份作為入口更加合適。


Image title



總結(jié)


以上就是我對移動端和pc端交互設(shè)計(jì)上區(qū)別的簡單分析和總結(jié),如果你有不同的建議和看法歡迎留言討論。

藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì)  ipad界面設(shè)計(jì)  包裝設(shè)計(jì) 、 圖標(biāo)定制  用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)


react-router快速入門上手

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

附Java/C/C++/機(jī)器學(xué)習(xí)/算法與數(shù)據(jù)結(jié)構(gòu)/前端/安卓/Python/程序員必讀書籍書單大全:

書單導(dǎo)航頁(點(diǎn)擊右側(cè) 極客俠棧 即可打開個人博客):極客俠棧
①【Java】學(xué)習(xí)之路吐血整理技術(shù)書從入門到進(jìn)階最全50+本(珍藏版)
②【算法數(shù)據(jù)結(jié)構(gòu)+acm】從入門到進(jìn)階吐血整理書單50+本(珍藏版)
③【數(shù)據(jù)庫】從入門到進(jìn)階必讀18本技術(shù)書籍網(wǎng)盤吐血整理網(wǎng)盤(珍藏版)
④【W(wǎng)eb前端】從HTML到JS到AJAX到HTTP從框架到全棧幫你走更少彎路(珍藏版)   
⑤【python】書最全已整理好(從入門到進(jìn)階)(珍藏版)
⑥【機(jī)器學(xué)習(xí)】+python整理技術(shù)書(從入門到進(jìn)階已經(jīng)整理好)(珍藏版)
⑦【C語言】推薦書籍從入門到進(jìn)階帶你走上大牛之路(珍藏版)
⑧【安卓】入門到進(jìn)階推薦書籍整理pdf書單整理(珍藏版)
⑨【架構(gòu)師】之路史詩級必讀書單吐血整理四個維度系列80+本書(珍藏版)
⑩【C++】吐血整理推薦書單從入門到進(jìn)階成神之路100+本(珍藏)
?【ios】IOS書單從入門到進(jìn)階吐血整理(珍藏版)
--------------------------------------------------------------------------------------------------------------------

如果您已經(jīng)入門reactjs,請繞道~ 這篇博客只適合初學(xué)者,初學(xué)reactjs的時(shí)候,如果你不會webpack,相信很多人都會被官方的例子繞的暈頭轉(zhuǎn)向。 ES6的例子也會搞死一批入門者。之前一直用的gulp,突然換了webpack,我也非常不習(xí)慣。在這塊也卡住了,對于想學(xué)reactjs的朋友,我的學(xué)習(xí)建議是這樣的:

nodejs => webpack => ES6 => reactjs 

官方的很多例子都是ES6語法+webpack打包的,所以在學(xué)習(xí)reactjs之前,最好是會ES6和webpack,這樣能事半功倍!

1、首先來說說nodejs

先安裝版本的nodejs,npm一般都是自帶的。安裝成全局的比較方便構(gòu)建項(xiàng)目。

npm install -g grunt-cli # 全局安裝
npm可安裝的插件可以在這里去找找 www.npmjs.com/ 如果不能安裝,可以使用淘寶的鏡象資源

2、webpack 

webpack是一款打包工具,可以做一些js壓縮,sass,less轉(zhuǎn)換,圖片處理,js代碼合成,ES6轉(zhuǎn)ES5語法等很多功能,如果用過grunt,或者gulp的朋友,webpack也就不陌生了。都是需要寫配置文件。

3、ES6

github上很多案例都是用到了ES6的語法,所以,這里我們可以通過webpack的工具 babel ,把ES6的語法轉(zhuǎn)化為ES5的語法,這樣我們就可以使用github上面的demo了。

比如:

import '../css/common.scss';
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, Link, IndexRoute } from 'react-router' 
import { browserHistory } from 'react-router'
這里的import 就是ES6的語法,在webpack里面使用babel工具將其轉(zhuǎn)化為 ES5的語法。我這里用了JSX(reactjs 提供的一種簡潔的語法)如果對JSX不了解的,可以去百度下。

4、快速開發(fā)

每次我們在修改JSX文件,或者SASS文件后,都要執(zhí)行webpack命令進(jìn)行打包,這樣的開發(fā)效率很慢,官方提供了一個很牛X的工具,react-hot-loader + webpack-dev-server 可以幫助你快速開發(fā),自動刷新頁面。

5、DEMO小試牛刀

這里我把自己做的一個DEMO分享給大家,如果你已經(jīng)安裝了nodejs,并且npm也是全局的。下載后解壓,打開 start.bat,輸入 npm install 安裝所需的插件,安裝成功后執(zhí)行 npm start ,等項(xiàng)目跑起來后,在瀏覽器輸入 http://127.0.0.1:3000 就可以訪問項(xiàng)目了。

這里是一個 react-router 的一個例子。

github 地址:https://github.com/mtsee/react-router-demo

藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)。

VUE進(jìn)階篇Part10(使用vue--cli腳手架一鍵搭建工 程)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

按照這個來配置就好了,這里相當(dāng)于是幫你把webpack需要的繁瑣的配置給你都弄好了,然后你直接從那里全部下下來就可以

記得先下好nodejs,安裝的代碼記得全都c v,不要自己敲

安裝完nodejs之后再安裝淘寶npm鏡像,安裝完了之后后面的安裝速度會快一點(diǎn)

npm install -g cnpm --registry=https://registry.npm.taobao.org
1
然后按照下面的五步流程一個一個來

1、全局安裝vue-cli

npm install -g vue-cli
1
2、進(jìn)入目錄–初始化項(xiàng)目

vue init webpack my-project //這個要進(jìn)入項(xiàng)目目錄再用,會創(chuàng)建一個my-project的文件夾
1
3、進(jìn)入項(xiàng)目

cd my-project
1
4、安裝依賴

npm install
1
5、啟動項(xiàng)目

npm run dev
1
以上執(zhí)行完后會出現(xiàn)一個 my-project 項(xiàng)目文件夾,用vscode打開后會看到以下目錄

下面解釋一下這些文件及目錄分別是干什么的

目錄結(jié)構(gòu)的分析

1、bind
├── build // 項(xiàng)目構(gòu)建(webpack)相關(guān)代碼 記憶:(夠賤) 9個
│ ├── build.js // 生產(chǎn)環(huán)境構(gòu)建代碼
│ ├── check-versions.js // 檢查node&npm等版本
│ ├── dev-client.js // 熱加載相關(guān)
│ ├── dev-server.js // 構(gòu)建本地服務(wù)器
│ ├── utils.js // 構(gòu)建配置公用工具
│ ├── vue-loader.conf.js // vue加載器
│ ├── webpack.base.conf.js // webpack基礎(chǔ)環(huán)境配置
│ ├── webpack.dev.conf.js // webpack開發(fā)環(huán)境配置
│ └── webpack.prod.conf.js // webpack生產(chǎn)環(huán)境配置

2、config
├── config// 項(xiàng)目開發(fā)環(huán)境配置相關(guān)代碼 記憶: (環(huán)配) 3個
│ ├── dev.env.js // 開發(fā)環(huán)境變量(看詞明意)
│ ├── index.js //項(xiàng)目一些配置變量
│ └── prod.env.js // 生產(chǎn)環(huán)境變量

3、node_modules
├──node_modules// 項(xiàng)目依賴的模塊 記憶: (依賴) *個

4、src
├── src// 源碼目錄 5

1
│ ├── assets// 資源目錄
│ │ └── logo.png
2
│ ├── components// vue公共組件
│ │ └── Hello.vue
3
│ ├──router// 前端路由
│ │ └── index.js// 路由配置文件
4
│ ├── App.vue// 頁面入口文件(根組件)
5
│ └── main.js// 程序入口文件(入口js文件)

5、static
└── static// 靜態(tài)文件,比如一些圖片,json數(shù)據(jù)等
│ ├── .gitkeep

6、剩余的文件
├── .babelrc// ES6語法編譯配置
├── .editorconfig// 定義代碼格式
├── .gitignore// git上傳需要忽略的文件格式
├── index.html// 入口頁面
├── package.json// 項(xiàng)目基本信息
├── README.md// 項(xiàng)目說明
--------------------- 

藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。

QQ 20周年H5刷屏幕后的設(shè)計(jì)故事

資深UI設(shè)計(jì)者

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

項(xiàng)目概述

QQ 20周年,是互聯(lián)網(wǎng)產(chǎn)品長青的一個傳說,就在 20 周年的時(shí)間節(jié)點(diǎn),QQ 向用戶提供一份關(guān)于他自己的、真誠熱切的 QQ 數(shù)據(jù)總結(jié)。通過數(shù)字,匯集出每個人自己的 QQ 時(shí)光歷程,從而牽引出每個人對于成長、青春、溝通、時(shí)代流動的感知與回憶,引發(fā) 2019 年一場集體的情感共鳴。

△ QQ 20年來的一路變遷

項(xiàng)目流程

項(xiàng)目歷時(shí)兩個月,從項(xiàng)目初期,視覺和產(chǎn)品密集溝通,了解需求,進(jìn)行頭腦風(fēng)暴,輸出多個視覺方案縱向?qū)Ρ龋詈蟠_定視覺風(fēng)格,分配視覺工作(插畫,動畫,3D)。項(xiàng)目后期,包括開發(fā)還原,數(shù)據(jù)調(diào)配等眾多環(huán)節(jié),環(huán)環(huán)相扣,缺一不可,一路過關(guān)斬將,整個 H5 需要不同崗位的高度配合和各專業(yè)的高度默契。

△ H5的項(xiàng)目流程圖

項(xiàng)目難點(diǎn)

1. 異地合作

本次 H5 聯(lián)動了動效,3D,插畫設(shè)計(jì)師的共同合作,由于支持 3D 的設(shè)計(jì)師在韓辦公,所以大部分都是在線上全英溝通,包括前期的項(xiàng)目進(jìn)度同步,還有后期的模型調(diào)整等環(huán)節(jié)都能及時(shí)反饋,快速反應(yīng),最后如期打磨出五款 spaceQQ。算是一次順利的異地合作。

△ 五款3D spaceQQ最終效果

2. 3D spaceQQ視覺還原

3D 鵝從設(shè)計(jì)軟件轉(zhuǎn)化為 H5 展示過程中,存在模型文件過大、材質(zhì)缺失等問題,直接影響用戶體驗(yàn)。在開發(fā)的過程中同學(xué)通過模型減面、重新選擇材質(zhì),還有模型拆分等解決方法,在視覺觀感和性能中建立了平衡的杠桿,最終實(shí)現(xiàn)了 15 個 SPACE QQ 的視覺還原。

△ 五款3D spaceQQ最終視覺還原效果

3. 視覺工作的同步進(jìn)行

由于項(xiàng)目時(shí)間比較緊迫,而且 H5 加入了 3D 模型,還有需要大量的動效,所以需要在同一時(shí)間線上,同步進(jìn)行,視覺稿輸出,動畫制作和 3D 模型打磨。考驗(yàn)設(shè)計(jì)師的溝通和執(zhí)行能力。與此同時(shí),需要隨時(shí)和開發(fā)同步動畫 demo 以確保動畫可實(shí)現(xiàn)。和產(chǎn)品密集溝通,及時(shí)根據(jù)文案調(diào)整畫面。

設(shè)計(jì)理念

因?yàn)?QQ 是陪伴了大多數(shù)用戶的一個產(chǎn)品,見證了整個互聯(lián)網(wǎng)社交的演變過程,容易引起用戶的情感共鳴。設(shè)計(jì)的初期,圍繞「個人軌跡」的主題發(fā)散了不同方向的視覺概念,在引起客戶共鳴感的復(fù)古元素和傳遞不斷「探索」未來的概念間尋找平衡點(diǎn)。最后沿用了 20 周年的太空概念貼合「探索」的主題,結(jié)合有年代特征的代表性視覺符號來引起「個人軌跡」的這一概念的用戶情感共鳴。另外,H5 運(yùn)用了 3D 打造了 15 只太空鵝,打造「個人軌跡」的專屬感,既聯(lián)動用戶溫暖的回憶之余,也增添了一些小驚喜。

概念設(shè)計(jì)

1. H5整體視覺風(fēng)格

QQ,是陪伴了大多數(shù)人成長的一個互聯(lián)網(wǎng)產(chǎn)品,其本身帶有很多高辨識度的視覺元素,例如對話框,提醒上線的音效等。因?yàn)?H5 本身是一個大數(shù)據(jù)總結(jié),專屬感非常強(qiáng)的一個產(chǎn)物,所以希望是喚醒用戶一些封塵已久的記憶,就像打開時(shí)間膠囊般的期待和感動。同時(shí)也象征著 QQ 一直陪伴在身邊,從而引起用戶的共鳴。

設(shè)計(jì)方面,除了通過一些標(biāo)志性的視覺元素喚醒用戶的回憶之外,也加入 QQ 20周年的太空「探索」主題的元素,響應(yīng) 20 周年的主題之余,也寓意 QQ 不斷地對外探索,從多個維度來看世界,尋找有趣的內(nèi)容。

對話框,是承載數(shù)據(jù)的視覺符號,也是貫穿整個 H5 的重要視覺符號之一。寓意著 QQ 一直致力于「溝通」,而且不同時(shí)代的 QQ 對話框都各有特點(diǎn),也是見證 QQ 時(shí)代變遷的重要元素,所以提取了三個階段代表性的對話框樣式來承載數(shù)據(jù),并且加入有時(shí)代特征的視覺元素(如bb機(jī),像素化的小箭頭等)作為輔助,增加 H5 的氛圍感,也算是視覺上的「小彩蛋」。

△ QQ原始對話框

H5 加入一些趣味感的元素,如笑臉,愛心等元素,背景輔以流動的彩色不規(guī)則圖案,來增加對話框的玩味。也寓意 QQ 20年來給用戶帶來源源不斷的樂趣,留下了不可取代的時(shí)代印記。

△ 重繪對話框

H5 中也加入了很多好玩的元素,不同時(shí)代所用的移動設(shè)備,融合貼近太空「探索」主題的背景;利用帶手套的手和不同的元素進(jìn)行互動;增加重繪經(jīng)典頭像的互動動畫,加入 QQ 空間的植物等懷舊元素,增加 H5 的可玩性和驚喜感。

△ 經(jīng)典頭像的重繪

△ 經(jīng)典頭像穿插在H5中的小彩蛋

△ 帶手套的手和有時(shí)代標(biāo)簽的元素互動

動畫設(shè)計(jì)

1. 視覺動態(tài)化方案

在動畫制作前期會出一份詳細(xì)的動態(tài)化分頁策劃,以及一份盡可能表達(dá)完整的動畫 demo,能便于設(shè)計(jì)與開發(fā)能準(zhǔn)確的估算出制作周期。在開發(fā)完成預(yù)研測試后,基于動畫 demo 共同制定一個大致的動態(tài)化方案──對話框等大面積使用代碼實(shí)現(xiàn),其他裝飾性小元素全部使用序列幀。在觀眾每滑一頁即可觸發(fā)當(dāng)前頁的動畫,且能保證大體動畫的流暢度。

2. 動畫制作

為了盡可能減少 H5 的運(yùn)算體積,又保證畫面動態(tài)的流暢程度,導(dǎo)出的序列必須滿足以下所有條件:

  • 全部元素可循環(huán)
  • 盡可能少的幀數(shù)
  • 可重復(fù)使用的素材

△ 設(shè)計(jì)了4個不同的色塊流動loop,方便開發(fā)安插在每頁合適的位置

3. 導(dǎo)出與同步

在配合開發(fā)導(dǎo)出的階段,為了能明確序列的標(biāo)記,所有序列文件命名為 xx-in/xx-loop/xx-out。使用同步工具以實(shí)現(xiàn) AE 動畫序列導(dǎo)出和開發(fā)提取素材能同步進(jìn)行,并保持實(shí)時(shí)更新和迭代。

△ 第6頁動畫導(dǎo)出序列

太空QQ形象設(shè)定

創(chuàng)建了四款全新的 spaceQQ,根據(jù)用戶的 QQ 年齡而設(shè)計(jì)。根據(jù)用戶的 QQ 年齡,分了四個款式的鵝:奢華,智能,閃亮和神秘四個概念,一個遞進(jìn)的尊貴程度,刺激用戶分享欲。包括基礎(chǔ)款的 QQ 在內(nèi),共創(chuàng)造了 5 個類型的 spaceQQ。每個設(shè)計(jì)都基于基本 spaceQQ 的形式,但是套裝的顏色和細(xì)節(jié)根據(jù)各自的概念各有特色。

△ spaceQQ總覽圖

配色方案

用戶可以根據(jù)自己的喜好更改這 5 款 spaceQQ 的裝扮顏色。

關(guān)于運(yùn)營

1. 專屬感

整個 H5 始終緊扣 QQ 20周年的太空「探索」主題,整個 H5,除了用數(shù)據(jù)喚醒用戶和 QQ 多年的點(diǎn)點(diǎn)滴滴之外,5 個 spaceQQ 概念設(shè)定,既能增加用戶的新鮮感,又能刺激用戶的分享欲,C4D 建立的 3D 形象豐富了整個 H5 的視覺層次,深化了 QQ 品牌的影響力,寓意鵝廠一直與時(shí)俱進(jìn),緊貼潮流。

2. 情緒調(diào)動

對于當(dāng)下的運(yùn)營活動來說,趣味性是引爆轉(zhuǎn)發(fā)量的重要元素,H5 結(jié)合 QQ 用戶創(chuàng)作的背景音樂和能夠調(diào)動用戶情感的設(shè)計(jì)語言來釋放用戶的情緒,比如驚喜感(用戶結(jié)合 QQ 的標(biāo)志性音效創(chuàng)作的背景音樂),榮譽(yù)感(不同 Q 齡獲取相應(yīng)的 spaceQQ)等,讓用戶產(chǎn)生持續(xù)的驚喜感,在懷舊和新鮮感中得到滿足,提升用戶活躍性。

總結(jié)

QQ 20周年 H5 設(shè)計(jì),嘗試結(jié)合了 3D,動畫,插畫等設(shè)計(jì)形態(tài),為每一位用戶打造專屬的「個人軌跡」,通過數(shù)字,拼湊出和 QQ 的過往朝夕,引起用戶共鳴。鵝廠不斷創(chuàng)新探索的同時(shí),也為用戶溫存屬于用戶自己的專屬回憶,深化 QQ 的品牌價(jià)值。

福利

考慮到部分同學(xué)想更仔細(xì)地查看、保存或收藏高清大圖的需求,我們設(shè)置了關(guān)鍵詞,微信公眾號后臺以「spaceQQ+序號」的方式回復(fù),例如「spaceQQ1」,即可逐一獲取對應(yīng)的高清頭像和壁紙。

掃碼領(lǐng)取專屬「個人軌跡」:

藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)。

日歷

鏈接

個人資料

存檔