摘要:由于其名氣和穩(wěn)定性獲得了廣泛好評(píng)。但是實(shí)際上在中并不是非常必要的。因此,這些結(jié)果也是純粹的速度實(shí)驗(yàn)。它是否容易使用,開(kāi)發(fā)過(guò)程是否令人愉快年和年的狀態(tài)報(bào)告顯示,和都享有良好的聲譽(yù),大多數(shù)開(kāi)發(fā)人員表示會(huì)再次使用。上手最簡(jiǎn)單和最快的學(xué)習(xí)曲線(xiàn)。
翻譯:瘋狂的技術(shù)宅
原文:https://www.toptal.com/react/...
本文首發(fā)微信公眾號(hào):jingchengyideng
歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章
前端和 JavaScript 是一個(gè)奇怪的世界。大量不斷推出的新技術(shù)的同時(shí),也在被不需要它們的人嘲笑,往往很多人都會(huì)這樣做。我們有時(shí)會(huì)對(duì)不斷涌現(xiàn)的信息、庫(kù)和討論感到不知所措,總希望能有一些穩(wěn)定的東西,就像能讓我們可以休整一段時(shí)間的避風(fēng)港。最近 React 似乎有變成 JavaScript 演變海洋中溫暖港灣的趨勢(shì)。
正是考慮到這一點(diǎn),我們決定制作這個(gè) React 系列教程,展示它的功能,并看看它與 Angular 和 VueJS 相比有什么特點(diǎn)。
當(dāng)然 React 并不是唯一的選擇,但目前它是最受歡迎、最穩(wěn)定、最具有創(chuàng)新性的解決方案之一,雖然它仍然在不斷升級(jí),但更多的是在改進(jìn),而不是增加功能。
2019年的 ReactReact 是一個(gè)視圖庫(kù),可以一直追溯到2011年,當(dāng)時(shí)它的第一個(gè)原型名為 FaxJs,并出現(xiàn)在 Facebook 上,React 是由 Jordan Walke(他也是上述原型的作者)于2013年5月29日在 JSConfUS 推出的,并于2013年7月2日在 GitHub 上公開(kāi)發(fā)布。
在2014年,當(dāng)開(kāi)始擴(kuò)大社區(qū)并推廣 React 時(shí),它受到持續(xù)歡迎。然而從我的角度來(lái)看,2015年是大型公司(例如 Airbnb 和 Netflix )開(kāi)始喜歡并采用 React 的里程碑年。此外,當(dāng)年還出現(xiàn)了React Native。 React Native背后的想法并不是什么全新的東西,不過(guò)看起來(lái)很有趣,尤其是因?yàn)樗玫搅?Facebook 的支持。
另一個(gè)重大變化是 Redux,一個(gè) Flux 實(shí)現(xiàn)。這使?fàn)顟B(tài)管理方式更加簡(jiǎn)單友好,使其成為迄今為止最成功的實(shí)現(xiàn)。
從其出現(xiàn)一直到現(xiàn)在,還有很多其他的東西供我們使用,包括 React tools,重寫(xiě)了核心算法;Fiber 用于語(yǔ)義轉(zhuǎn)換版本控制等等。到了今天,我們處于 v16.6.3,幾周后可能就會(huì)發(fā)布支持 Hooks 的新版本(它應(yīng)該在 16.7.0 得到支持,但由于對(duì) React.lazy 做了一些修復(fù),就先發(fā)布了一個(gè)版本)。React 由于其名氣和穩(wěn)定性獲得了廣泛好評(píng)。
但 React 到底是什么?好吧,如果你身為前端開(kāi)發(fā)人員但是從來(lái)都沒(méi)有聽(tīng)說(shuō)過(guò),那么我就要說(shuō)聲“恭喜你”,因?yàn)檫@是一個(gè)了不起的壯舉。
開(kāi)個(gè)玩笑而已。React 是一個(gè)聲明式的基于組件的視圖庫(kù),可以幫助你構(gòu)建 UI。它是一個(gè)庫(kù)而不是一個(gè)框架,雖然最初很多人把它描述為后者。
顯然,如果我們要把 Redux 和 React Router 等添加到 React,它就擁有了制作常規(guī)單頁(yè)應(yīng)用程序所需的所有東西,這可能這就是它有時(shí)被錯(cuò)誤地描述為框架而不是庫(kù)的原因 。如果一定要這樣認(rèn)為的話(huà),將該環(huán)境的所有組件放在一起,術(shù)語(yǔ)“框架”可能有點(diǎn)適合它,但就其本身而言,React 僅僅是一個(gè)庫(kù)。
不要再糾結(jié)改怎么對(duì)其分類(lèi)了,先關(guān)注 React 有什么獨(dú)特之處,一些之前沒(méi)有注意到的東西。首先,當(dāng)你第一次看到 React 時(shí),就會(huì)想到 JSX,因?yàn)檫@是你看到代碼時(shí)的第一個(gè)感受。 JSX是一種 JavaScript 語(yǔ)法擴(kuò)展,有點(diǎn)類(lèi)似于 HTML/XML。說(shuō)到 React 和 JSX,它們與 HTML 有一些區(qū)別,例如,React 中的類(lèi)是 className,沒(méi)有tabindex 但是有 tabIndex,樣式接受具有駝峰命名的屬性的 JavaScript 對(duì)象,依此類(lèi)推。
有一些細(xì)微的差別,但是任何人都應(yīng)該立即接受它們。事件處理是通過(guò)例如 onChange 和 onClick 屬性實(shí)現(xiàn)的,這些屬性可以用來(lái)附加一些函數(shù)來(lái)處理事件。此外,以后的組件可以通過(guò)使用 props 自由重用和自定義,因此沒(méi)有理由多次編寫(xiě)相同的代碼。
import React, { Component } from "react"; export default class App extends Component { render() { return (Hello World, {this.props.name}); } }
但是實(shí)際上 JSX 在 React 中并不是非常必要的。你可以編寫(xiě)常規(guī)函數(shù)來(lái)創(chuàng)建元素,而無(wú)需使用JSX。上面的代碼可以像下面這樣去用。
import React, { Component } from "react"; export default class App extends Component { render() { return React.createElement( "div", null, "Hello World, ", this.props.name ); } }
很顯然我并不是建議你用這樣的語(yǔ)法,盡管有些情況下它有可能會(huì)派上用場(chǎng)(例如你想要引入一個(gè)非常小的東西但是又不想更改構(gòu)建環(huán)境)。
實(shí)際上我展示上述代碼還有另一個(gè)原因。通常,開(kāi)發(fā)人員不理解我們?yōu)槭裁葱枰獔?zhí)行以下操作:
import React from "react";
代碼片段應(yīng)該是能夠自解釋的。即使我們正在提取 Component,仍然需要 React,因?yàn)?Babel 在 JSX 之上轉(zhuǎn)換為 React.createElement。所以如果我們不導(dǎo)入 React 就會(huì)失效。前面我提到了 Babel,這是一個(gè)工具,可以幫助我們預(yù)覽那些尚未在 JavaScript 中(更確切地說(shuō)是在瀏覽器中)支持的東西,或者以某種方式對(duì) JavaScript 進(jìn)行擴(kuò)展(或者類(lèi)似于 TypeScript,Babel 從 Babel 7 開(kāi)始支持的不同語(yǔ)言)。感謝Babel:
JSX 將被轉(zhuǎn)化為成瀏覽器可以理解的代碼。
我們可以使用尚未在瀏覽器中實(shí)現(xiàn)的新功能(例如類(lèi)屬性)。
我們可以支持新瀏覽器中的特性,同時(shí)在舊瀏覽器中支持較舊的功能。
簡(jiǎn)而言之,在 JavaScript 中,就是今天的代碼明天仍然能用;這可能需要為此專(zhuān)門(mén)再寫(xiě)一篇文章。值得一提的是,React 的導(dǎo)入也可以被一些其他技術(shù)繞過(guò)(比如通過(guò) Webpack 引入 ProvidePlugin 等),但是由于篇幅有限,我們將避免使用這種方式,并假設(shè)用戶(hù)將使用 Create React App( CRA)(稍后將提到有關(guān)此工具的更多信息)。
另一點(diǎn)比 JSX 本身更重要,那就是 React 基于虛擬 DOM。簡(jiǎn)而言之,虛擬 DOM 是用 JavaScript 編寫(xiě)的在內(nèi)存中的理想樹(shù)結(jié)構(gòu),稍后我們會(huì)把它與真實(shí) DOM 進(jìn)行比較。
怎樣與 Angular 和 Vue 進(jìn)行比較?我很不喜歡對(duì)庫(kù)進(jìn)行比較,特別是當(dāng)我們被迫把梨和蘋(píng)果放在一起進(jìn)行比較時(shí)。
因此,我將嘗試使用一系列簡(jiǎn)短的問(wèn)題和答案將 React 與 Angular 和 Vue 進(jìn)行比較。這種比較與技術(shù)相關(guān),而不是主觀的作出 “X比Y更好,因?yàn)樗褂?JSX 而不是模板?!?/em> 這種出于個(gè)人偏好的對(duì)比。另外在速度和內(nèi)存分配等方面 React 與其主要競(jìng)爭(zhēng)對(duì)手(Angular 和 Vue 都能想得到)非常相似,有一篇關(guān)于這個(gè)問(wèn)題的文章很不錯(cuò),但請(qǐng)記住這一點(diǎn):絕大多數(shù)程序并不會(huì)做這種處理上萬(wàn)行數(shù)據(jù)的事。因此,這些結(jié)果也是純粹的速度實(shí)驗(yàn)。實(shí)際上你也不會(huì)把這放在首位。
那么讓我們來(lái)看看關(guān)于 React 的問(wèn)題以及它與競(jìng)爭(zhēng)對(duì)手的比較:
我想擁有更多的工作機(jī)會(huì)。 React 到底有多受歡迎?
嗯,這很容易回答 —— 選擇 React。實(shí)際上,我會(huì)說(shuō) React 的工作機(jī)會(huì)大約其它的 6 到 10 倍(可能出入比較大,在一些大網(wǎng)站是 50 倍,也有些網(wǎng)站是 6 倍),是 Vue 的 2 到 4倍,比 Angular 更多。對(duì) React experts 的需求很大,但是為什么 Vue 在 GitHub 上非常受歡迎(實(shí)際上它獲得了比 React 更多的star)卻沒(méi)有更多的職位空缺?這點(diǎn)我不知道?!咀g者注:作者是美國(guó)人,這里指的是美國(guó)的就業(yè)市場(chǎng)】
我想要一個(gè)很大的社區(qū),還有大量的庫(kù),能夠快速解決可能出現(xiàn)的問(wèn)題。
選 React,不要再猶豫了。
它是否容易使用,開(kāi)發(fā)過(guò)程是否令人愉快?
2018年和2017年的 JS 狀態(tài)報(bào)告顯示,React 和 Vue 都享有良好的聲譽(yù),大多數(shù)開(kāi)發(fā)人員表示會(huì)再次使用。另一方面Angular 有一種趨勢(shì),每年都會(huì)有越來(lái)越多的人說(shuō)不會(huì)再次使用它。
我想創(chuàng)建一個(gè)新的單面應(yīng)用,但我不想額外去找這種支持庫(kù)。
我認(rèn)為這大概是 Angular 值得選擇的唯一原因。
我不是大公司。但是希望盡可能獨(dú)立,應(yīng)該選擇哪個(gè)?
Vue —— 它是我們?nèi)揞^中唯一獨(dú)立的一個(gè)。 ( Facebook 支持 React,而 Google 支持 Angular。)
上手最簡(jiǎn)單和最快的學(xué)習(xí)曲線(xiàn)?
Vue/React。在這里我更傾向于 Vue,但這只是我個(gè)人的意見(jiàn)。至于為什么?因?yàn)槟悴恍枰?JSX(它是可選的),它基本上只是 HTML + CSS + JavaScript。
React Tutorial:開(kāi)始你的第一個(gè)程序目前上手 React 最簡(jiǎn)單方法是使用 CRA,這是一個(gè)為你創(chuàng)建項(xiàng)目的 CLI 工具,可幫助你避免配置 Webpack / Babel 等環(huán)境。你只需要依賴(lài)默的認(rèn)配置方式,并隨著時(shí)間的推移更新包含在內(nèi)的內(nèi)容。多虧了這一點(diǎn),你無(wú)需關(guān)心某些關(guān)鍵庫(kù)的主要更新。
當(dāng)然,稍后,你可以通過(guò)運(yùn)行 npm run eject 來(lái)“彈出”自己并自己處理每個(gè)細(xì)節(jié)。這種方法有其自身的優(yōu)點(diǎn),因?yàn)槟憧梢栽黾釉瓉?lái)不可用的東西(例如裝飾器)來(lái)增強(qiáng)你的應(yīng)用,但它也可能是令人頭疼的問(wèn)題,因?yàn)樗枰ㄙM(fèi)更多的時(shí)間去配置許多額外的文件。
所以,首先要做的是:
npx create-react-app {app-name}
然后 npm run start 就完成了。
類(lèi)組件與函數(shù)組件我們應(yīng)該先解釋這些組件的不同之處?;旧厦總€(gè)組件可以是 function 或 class。它們之間的主要區(qū)別在于,類(lèi)組件有函數(shù)組件中沒(méi)有的一些功能:它們有 state 并使用 refs、生命周期等。從 v16.7 開(kāi)始我們可以使用 hooks,因此可以使用 hooks 來(lái)進(jìn)行 state 和 refs。
類(lèi)組件有兩種類(lèi)型:Component 和 PureComponent。它們唯一的區(qū)別是 PureComponent 可以對(duì) props 和 state 進(jìn)行淺層比較 —— 這在你不想“浪費(fèi)”渲染資源的情況下有獨(dú)到的好處,一個(gè)組件及其子組件恰好在渲染后處于相同狀態(tài)。不過(guò)它只有一個(gè)淺層比較;如果你想實(shí)現(xiàn)自己的比較操作(假如你傳遞的是復(fù)雜的 props),只需要用 Component 并覆蓋 shouldComponentUpdate(默認(rèn)情況下返回true)。從 16.6 + 開(kāi)始,在函數(shù)組件中也可以用類(lèi)似的東西 —— 全靠 React.memo 這個(gè)更高階的組件,在默認(rèn)情況下表現(xiàn)得像 PureComponent(淺層比較),在你進(jìn)行自定義的 props 比較時(shí)它還需要第二個(gè)參數(shù)。
一般來(lái)說(shuō)如果你能用函數(shù)組件(假設(shè)你不需要類(lèi)功能)那么就用它。不過(guò)從 16.7.0 開(kāi)始,由于生命周期方法,只能用類(lèi)組件。但是我認(rèn)為函數(shù)組件更透明,更容易推理和理解。
React 生命周期方法Constructor(props)
可選,CRA 使其變得受歡迎,默認(rèn)包含 JavaScript 的類(lèi)字段聲明。聲明是否通過(guò)類(lèi)中的箭頭函數(shù)去綁定方法是沒(méi)有意義的。類(lèi)似的狀態(tài)也可以初始化為類(lèi)屬性。
僅用于 ES6 類(lèi)中初始化對(duì)象的本地狀態(tài)和綁定方法。
componentDidMount()
在這里進(jìn)行 Ajax 調(diào)用。
如果你需要事件監(jiān)聽(tīng)器,訂閱等功能,可以在此處添加。
你可以在這里使用 setState(但是它會(huì)使組件重新渲染)。
componentWillUnmount()
清除所有仍在進(jìn)行的東西 —— 例如,Ajax應(yīng)該被中斷,取消訂閱,清除定時(shí)器等等。
不要調(diào)用 setState,因?yàn)樗鼪](méi)有意義,因?yàn)榻M件將會(huì)被卸載(并且你會(huì)得到一個(gè)警告)。
componentDidUpdate(prevProps, prevState, snapshot)
在組件剛剛更新完畢時(shí)執(zhí)行(在開(kāi)始渲染時(shí)不會(huì))。
有三個(gè)可選的參數(shù)(以前的props,以前的 state 和只有在你的組件實(shí)現(xiàn) getSnapshotBeforeUpdate 時(shí)才會(huì)出現(xiàn)的快照 )。
僅當(dāng) shouldComponentUpdate 返回true時(shí)才會(huì)執(zhí)行。
If you use setState here, you should guard it or you will land in an infinite loop.
如果你在這里用到了 setState,應(yīng)該保護(hù)它,否則將會(huì)陷入無(wú)限循環(huán)。
shouldComponentUpdate(nextProps, nextState)
僅用于性能優(yōu)化。
如果返回 false,則不會(huì)調(diào)用渲染器。
如果重寫(xiě)的 SCO 只是對(duì) props/state的淺層比較,可以使用 PureComponent。
getSnapshotBeforeUpdate()
可用于保存一些與當(dāng)前 DOM 有關(guān)的信息,例如當(dāng)前的滾動(dòng)位置,稍后可在 componentDidUpdate 中重用,用來(lái)恢復(fù)滾動(dòng)的位置。
componentDidCatch(error, info)
應(yīng)該記錄日志錯(cuò)誤的地方。
可以調(diào)用 setState,但在以后的版本中,將會(huì)在靜態(tài)方法getDerivedStateFromError(error) 中被刪除,它將通過(guò)返回一個(gè)值來(lái)更新?tīng)顟B(tài)。
還有兩種靜態(tài)方法,在其他的段落中提到過(guò)
static getDerivedStateFromError(error)
此處提供錯(cuò)誤信息。
應(yīng)返回一個(gè)對(duì)象值,該值將會(huì)更新可用于處理錯(cuò)誤的狀態(tài)(通過(guò)顯示內(nèi)容)。
由于它是靜態(tài)的,因此無(wú)法訪(fǎng)問(wèn)組件實(shí)例本身。
static getSnapshotBeforeUpdate(props, state)
應(yīng)該在 props 隨時(shí)間變化的情況下使用 —— 例如根據(jù) React docs,它可能用于轉(zhuǎn)換組件。
由于它是靜態(tài)的,因此無(wú)法訪(fǎng)問(wèn)組件實(shí)例本身。
注意,目前還有更多可用的方法,但它們可能會(huì)在 React 17.0 中被刪除,所以就不在這里沒(méi)有提起了。
State vs. Props我們先從 Props 開(kāi)始,因?yàn)樗菀捉忉尅rops 是傳給組件的屬性,以后可以在組件顯示信息或業(yè)務(wù)邏輯時(shí)重用它 。
import React, { Component } from "react"; export default class App extends Component { render() { return (); } } const HelloWorld = (props) => Hello {props.name}
在上面的例子中,name 是一個(gè) prop。prop 是只讀元素,不能直接在子組件中更改。很多人有一種不太好的習(xí)慣,那就是把 prop 復(fù)制到 state ,然后再對(duì) state 進(jìn)行操作。當(dāng)然有時(shí)候你希望執(zhí)行類(lèi)似 “在提交之后去更新父組件的初始狀態(tài)” 這樣的操作,但這種情況非常少見(jiàn) —— 在這種情況下,更新初始狀態(tài)可能有意義。另外不僅可以給子組件傳遞字符串這樣的 prop ,還可以傳遞數(shù)字、對(duì)象、函數(shù)等。
prop 還有一個(gè)更有用的東西叫做 defaultProps,這是一個(gè)靜態(tài)字段,它可以告訴你組件的默認(rèn) prop 是什么(比如當(dāng)它們沒(méi)有傳遞給組件時(shí))。
在“狀態(tài)提升”的情況下,其中一個(gè)組件(父組件)具有稍后由其子組件重用的狀態(tài)(例如,一個(gè)子組件用來(lái)顯示而另一個(gè)用來(lái)編輯),那么我們需要將該功能從父組件傳遞給子組件。 它允許我們更新父級(jí)的本地狀態(tài)。
另一方面,狀態(tài)是一個(gè)可以修改的本地狀態(tài),但是通過(guò) this.setState 間接修改。如果直接去改變狀態(tài),組件將不會(huì)感知到,更不會(huì)因?yàn)闋顟B(tài)的改變而重新渲染。
SetState 是一種更改本地狀態(tài)對(duì)象的方法(通過(guò)執(zhí)行淺層合并),之后組件通過(guò)重新渲染自己來(lái)響應(yīng)它。請(qǐng)注意,在使用 setState 之后,this.state 屬性不會(huì)立即對(duì)更改(它具有異步性質(zhì))作出反應(yīng),因?yàn)閮?yōu)化的原因,可能會(huì)將 setState 的幾個(gè)實(shí)例一起進(jìn)行批處理。調(diào)用它的方式有好幾種,其中一種方式允許我們?cè)趯?duì)狀態(tài)進(jìn)行更新能夠后立即對(duì)組件執(zhí)行某些操作:
setState({value: ‘5’})
setState((state, props) => ({value: state.name + “‘s”}))
setState([object / function like above], () => {}) —— 這個(gè)表單允許我們附加 callback,當(dāng) state 顯示我們想要的數(shù)據(jù)時(shí)被調(diào)用(在第一個(gè)參數(shù))。
import React, { Component } from "react"; export default class App extends Component { state = { name: "Someone :)" } onClick = () => this.setState({ name: "You" }) render() { return (React Context); } } const HelloWorld = (props) => Hello {props.name}
React 最近穩(wěn)定的 Context API(已經(jīng)在 React 中存在了相當(dāng)長(zhǎng)的時(shí)間,盡管被 Redux 等一些最受歡迎的庫(kù)廣泛使用,卻是一個(gè)實(shí)驗(yàn)性功能)有助于我們解決一個(gè)問(wèn)題:Props drilling。簡(jiǎn)而言之 Props drilling 是在結(jié)構(gòu)中深入傳遞 props 的一種方式 —— 例如,它可以是組件的某種主題、針對(duì)特定語(yǔ)言的本地化、用戶(hù)信息等。在 Context出現(xiàn)之前(或者更確切地說(shuō),在它變成非實(shí)驗(yàn)功能之前),它是通過(guò)遞歸方式從父級(jí)一直傳遞到到子級(jí)的最后一級(jí)的來(lái)進(jìn)行鉆取的(顯然還有可以解決這個(gè)問(wèn)題的 Redux)。請(qǐng)注意,此功能僅僅用于解決 Props drilling 的問(wèn)題,并且不能替代 Redux 或 Mobx 等。當(dāng)然如果你只使用狀態(tài)管理庫(kù),則可以隨意替把它替換掉。
總結(jié)這是我們的React教程的第一部分。在后續(xù)的文章中,我們會(huì)設(shè)計(jì)更多高級(jí)主題,包括樣式和類(lèi)型檢查,以及生產(chǎn)部署和性能優(yōu)化。
歡迎繼續(xù)閱讀本專(zhuān)欄其它高贊文章:12個(gè)令人驚嘆的CSS實(shí)驗(yàn)項(xiàng)目
世界頂級(jí)公司的前端面試都問(wèn)些什么
CSS Flexbox 可視化手冊(cè)
過(guò)節(jié)很無(wú)聊?還是用 JavaScript 寫(xiě)一個(gè)腦力小游戲吧!
從設(shè)計(jì)者的角度看 React
CSS粘性定位是怎樣工作的
一步步教你用HTML5 SVG實(shí)現(xiàn)動(dòng)畫(huà)效果
程序員30歲前月薪達(dá)不到30K,該何去何從
第三方CSS安全嗎?
談?wù)剆uper(props) 的重要性
本文首發(fā)微信公眾號(hào):jingchengyideng 歡迎掃描二維碼關(guān)注公眾號(hào),每天都給你推送新鮮的前端技術(shù)文章文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102179.html
摘要:個(gè)人所有文章同步到前言最近公司準(zhǔn)備開(kāi)發(fā)幾款可以在微信小程序端和端同時(shí)運(yùn)行的一套商城,接著就是任務(wù)下發(fā)嘍,但是有一點(diǎn),時(shí)間緊任務(wù)重,直接說(shuō)其他的不管,反正幾個(gè)星期之內(nèi)必須上線(xiàn),頭疼。 個(gè)人所有文章同步到:https://github.com/zhengzhuan... 前言 最近公司Boss準(zhǔn)備開(kāi)發(fā)幾款可以在微信小程序端和H5端同時(shí)運(yùn)行的一套商城,接著就是任務(wù)下發(fā)嘍,但是有一點(diǎn),時(shí)間緊任...
摘要:一團(tuán)隊(duì)組織網(wǎng)站說(shuō)明騰訊團(tuán)隊(duì)騰訊前端團(tuán)隊(duì),代表作品,致力于前端技術(shù)的研究騰訊社交用戶(hù)體驗(yàn)設(shè)計(jì),簡(jiǎn)稱(chēng),騰訊設(shè)計(jì)團(tuán)隊(duì)網(wǎng)站騰訊用戶(hù)研究與體驗(yàn)設(shè)計(jì)部百度前端研發(fā)部出品淘寶前端團(tuán)隊(duì)用技術(shù)為體驗(yàn)提供無(wú)限可能凹凸實(shí)驗(yàn)室京東用戶(hù)體驗(yàn)設(shè)計(jì)部出品奇舞團(tuán)奇虎旗下前 一、團(tuán)隊(duì)組織 網(wǎng)站 說(shuō)明 騰訊 AlloyTeam 團(tuán)隊(duì) 騰訊Web前端團(tuán)隊(duì),代表作品WebQQ,致力于前端技術(shù)的研究 ISUX 騰...
摘要:一團(tuán)隊(duì)組織網(wǎng)站說(shuō)明騰訊團(tuán)隊(duì)騰訊前端團(tuán)隊(duì),代表作品,致力于前端技術(shù)的研究騰訊社交用戶(hù)體驗(yàn)設(shè)計(jì),簡(jiǎn)稱(chēng),騰訊設(shè)計(jì)團(tuán)隊(duì)網(wǎng)站騰訊用戶(hù)研究與體驗(yàn)設(shè)計(jì)部百度前端研發(fā)部出品淘寶前端團(tuán)隊(duì)用技術(shù)為體驗(yàn)提供無(wú)限可能凹凸實(shí)驗(yàn)室京東用戶(hù)體驗(yàn)設(shè)計(jì)部出品奇舞團(tuán)奇虎旗下前 一、團(tuán)隊(duì)組織 網(wǎng)站 說(shuō)明 騰訊 AlloyTeam 團(tuán)隊(duì) 騰訊Web前端團(tuán)隊(duì),代表作品WebQQ,致力于前端技術(shù)的研究 ISUX 騰...
摘要:一團(tuán)隊(duì)組織網(wǎng)站說(shuō)明騰訊團(tuán)隊(duì)騰訊前端團(tuán)隊(duì),代表作品,致力于前端技術(shù)的研究騰訊社交用戶(hù)體驗(yàn)設(shè)計(jì),簡(jiǎn)稱(chēng),騰訊設(shè)計(jì)團(tuán)隊(duì)網(wǎng)站騰訊用戶(hù)研究與體驗(yàn)設(shè)計(jì)部百度前端研發(fā)部出品淘寶前端團(tuán)隊(duì)用技術(shù)為體驗(yàn)提供無(wú)限可能凹凸實(shí)驗(yàn)室京東用戶(hù)體驗(yàn)設(shè)計(jì)部出品奇舞團(tuán)奇虎旗下前 一、團(tuán)隊(duì)組織 網(wǎng)站 說(shuō)明 騰訊 AlloyTeam 團(tuán)隊(duì) 騰訊Web前端團(tuán)隊(duì),代表作品WebQQ,致力于前端技術(shù)的研究 ISUX 騰...
閱讀 2408·2023-04-26 01:57
閱讀 3377·2023-04-25 16:30
閱讀 2419·2021-11-17 09:38
閱讀 1251·2021-10-08 10:14
閱讀 1485·2021-09-23 11:21
閱讀 3803·2019-08-29 17:28
閱讀 3560·2019-08-29 15:27
閱讀 1111·2019-08-29 13:04