很迷茫,不知道自己現在是要繼續學習 React.js 還是系統地學習 JS?

由於本人js水平一般,只能算是入門,工作中遇到js的地方通通用jquery來解決的,今年看react比較火,學習了一陣子,感覺學習起來有些困難,有些地方不是很好理解。之前看到有人說把js學好了,在學習這些框架就好學了,所以現在很迷茫,不知道到底是繼續堅持學習React.js還是系統的學習js呢


大家都在說基礎很重要,原型鏈很重要,閉包很重要,但是對於年輕的前端來說,閉包為何重要,原型鏈在哪裡用,這是兩個哲學問題啊。

所以這些名詞好像就是初級前端中級前端的一道分水嶺,年輕的前端不是無法掌握閉包,而是沒有接觸使用閉包的場景。如果項目用了面向對象的編程思想,要封裝對象的私有函數,師傅教你套模板寫,隨手就是一個閉包,天天寫閉包,不會用才怪。

因此閉包算是高級特性,或者重中之重的基礎么?也可能你在上班的第一天就開始用閉包,但是依然不知道道理。所以在我看來這些算不得基礎,基礎的東西就是純粹的語法。

比如我問過學生一個問題:

$(".title").css({color: "red"})

這句代碼中$是什麼?

color可以加引號么?可以不加么?

很多人用了很多年jQuery,但是從來沒想過$是什麼吧。

$是個函數名,因為後面緊接著了一個括弧,而$(".title")是一個對象,並且具有css方法,而css方法可以接受一個對象作為參數,既然是對象,那麼鍵名可以省略引號。

關於this的四種情況,也就是最後一個new比較奇怪,畢竟是引入了新的語法。

而我們看待一個函數,無非就是三件事:

1. 傳入幾個參數,分別是什麼類型,有沒有重載。

2. 函數做了什麼,怎麼使用了this,有沒有修改外部變數/DOM。

3. 函數返回值是什麼類型。

比如bind是什麼。

1. 傳入一個對象

2. 把這個對象作為調用函數的指定this

3. 返回這個綁定了this的函數

所以bind返回了一個函數,如此一來就不會和call搞混了(我也不是很懂能搞混是什麼鬼...)

不涉及數據結構和演算法的事情,都是語法可以搞得定的,如果你還不能做到每天輕鬆閱讀50頁犀牛書並且輕鬆看懂所有代碼,那麼不妨從最基礎的語法練習開始。當對語法的掌握爐火純青的時候,看書和學習自然會覺得阻力小了很多。

想要學react,但是基礎不牢,當然會覺得心虛,這也就是你來提問的原因。


系統的學習 JS


「感覺學習起來有些困難,有些地方不是很好理解」,就是因為js基礎太弱,還不趕緊系統的補補js基礎。


「學了什麼「既不是實力,也不是美德。

「做了什麼「才是。

怎麼就不能明白。


前端從2010年開始,開始出現一系列框架,backbone、avalon、angular、react、vue等,乃至最近比較火的Weex、ReactNative、微信小程序等等。

新出的東西要不要學,要先搞明白這些東西為何出現,用來解決什麼問題。

先說『b、a、a、r、v』,這些框架統稱MV*框架。

隨著移動端的爆髮式增長,非同步渲染模式的流行,前端經歷了一段業務邏輯處理(M層)和視圖展現更新(V層)混寫的混亂時期,這種混寫模式已漸漸不滿足複雜業務邏輯的切入,代碼變得難易維護。

而MV*框架的出現正是為了解決混寫的尷尬,通過架構將M層和V層解耦,以承載更複雜的業務需求。

例如backbone是MVC架構,通過URL的hash改造來作為router實現V層的切換。

例如vue是MVVM架構,通過引入view-model層通過雙綁定的形式實現M和V層的解耦。

等等

總之,這類框架是前端對M和V層解耦的架構嘗試,不像jquery、zepto僅僅是封裝前端兼容性的工具類,是util。

吶,這些類庫其實和後端MVC架構的框架一樣咯。

學Java的是學struts還是學spring mvc呢?

學PHP的是學zend還是學ThinkPHP呢?

學前端的是學react還是學vue呢?

打好基礎,理解原理,框架信手拈來。

再說Weex、ReactNative、微信小程序等。

這些是為了解決hybrid混合開發模式下前端性能問題。

webview的性能瓶頸在於DOM的解析渲染,曾經做過測試,1000個商品坑位,約1W個DOM,移動端安卓原生瀏覽器,約1/3(魅族、小米、華為之流)滾動必crash。

而RN這些框架廢棄DOM,引入Virtual DOM,實現輕量級的『解釋器』替換掉webview,通過bridge調用將virtual DOM或者擴展API的調用傳遞給Native,Native進而將Virtual DOM的更新同步到Native組件的更新或者執行相應的擴展操作。

如此這般,便實現了JS操作原生組件,解決webview DOM性能問題,同時又兼具解釋型語言隨時發布的特性。

附圖:移動端開發模式演進

以RN為例,原理如下圖:

至此,對於這些框架為何出現,是否更清晰一點。至於要不要學,還是那句話:打好基礎,理解原理,框架信手拈來。


1 學你認為難的知識。

2 不系統學習 JS 是無法理解 React 的。


謝邀。

我的觀點與樓上的觀點不一樣,可能會被噴,但是還是覺得有必要說出來。

樓主你可能並不是js水平不行,而是編程基礎水平不好。

js在語法層面還是比較簡單的,現在es的發展越來越向傳統後端語言靠近,如果你本身編程基礎過關,看一遍js的語法,多用幾遍語法應該就能熟悉了。但是,懂語法只是懂得了如何搬磚而已,我們可是要建房子的,怎麼將磚頭鋼筋組織起來才是體現水平的地方,賣弄幾個api只能騙騙外行而已。樓主現在的心態跟那些熱衷學習各種語言的人何其相似,能用10種語言寫hello world,又如何?

編程水平牛逼不是指能用牛逼的語法、酷炫的API,而是軟體架構、代碼組織上的牛逼。

看到樓上有人說看計算機基礎知識,網路原理,數據結構什麼的,雖然這些東西重要,但是目前樓主要優先的並不是這些底層的東西。你們計算機專業的,走的是底層到應用層的路子,但並不是適合所有人的路,工作了就應該是從應用層到底層,遇到瓶頸了再補底層。搬磚的工作都做不好了,咱們就不要談理論力學了好吧。

所以,我的建議是:先提高編程基礎,再提高語言組織能力。

語言本身也是基礎,畢竟代碼還是要用語言寫出來的。你有滿腔情話,但說不出來,妹子也不可能讀到你的心。js包括es5、es6的語法過一遍也不會花很多時間吧?可能你在刷這條知乎的時間,就能看三五條API了呢,糾結這個幹嗎,直接去學啊!React裡面都是js寫的,js不熟悉怎麼寫呢?

熟悉語法之後,就是代碼組織層面了。市面上說的設計模式之類的東西,就是指這玩意,也就是將代碼邏輯按照一定規範去組織起來。我猜樓主應該也是在這些地方卡住了,有時候明明直接就能實現的功能,偏偏在React中就繞了幾個彎來實現。

這些都是套路,什麼MVC、MVVM、數據流管理,都是套路,程序開發中的套路。

提高這方面的能力,只能靠多看牛逼的代碼,多思考這麼做的意義,沒有其他捷徑可走。


系統的學習JS,我舉個例子,在ReactJS裡面經常可以看到.bind(this)的出現,如果你不知道Function.prototype.bind() 意義和作用,怎麼能學好React呢?


幾乎每個前端入門的人,是從js的一些ui庫學起的,目前的前端就業形勢很嚴峻,大批所謂的前端工程師量產到社會,這個行業已經變得更加有競爭。

不懂react,想找react的工作;不懂Vue,想找Vue的工作。這並不是天方夜譚,而是一個可以實現的目標。雖然大部分公司都是明確要求有相關經驗或者精通該框架,但是還是存在一些公司會接納有js基礎的、學習能力優秀的求職者。

說說我第一次接觸react,我在廣州找工作的日子裡。

面試官問我:小夥子,你會react嗎?

我說:沒聽過,我只會一點jQuery,原生js不怎麼會,但是我可以學會它。

好吧,最後還是錄用我了,為什麼?或許這就是伯樂吧。然後,我這個半吊子就開始做react開發,2個多月後,完成了視圖部分的代碼。。

故事到這裡就差不多了,其實當初我完全可以選擇用jQuery或者bootstrap開發的公司,然後走大部分前端的老路,一點點的從jQuery轉向原生js,但是我選擇了接收這份未知的工作,用我完全沒接觸過的技術。

一直很喜歡和新人分享我入行前端的故事,也想分享一句話:你不去試試,永遠不知道自己的潛力有多大。

假如你想用vue,就去面試vue開發的公司,想用react,就去用react開發的公司,當你通過艱難的面試,被錄用之後,跟著公司的其他同事一起好好乾活,什麼類庫、什麼插件、什麼框架、什麼坑,都有辦法去解決,而你也會因此學到你想要的東西。


編程的學習,縱向永遠是語言到類庫到框架。


js


直接正面上react可能不太好,大廠出品,代碼很難拆,跟Angular一個尿性,沒兩個星期全身心投入,理不到頭緒的,react-lite可能會好入手一點。

當然你如果只是用react而不是拆react,到網上找startup教程就好,寫一兩個demo,看些基本場景,也就那麼回事,只要不突破基本場景,基本夠用,不過不求甚解是比較難受,這種情況也有折衷方法,到網上找些底層原理的博客,看一遍,想一遍,不管懂不懂,至少留個印象,以後遇到一些談優化寫法的,說不定就有感覺。

學技術總有個過程,多看代碼,多想,想不通再找資料,資料一般是次級地位,只是輔助看代碼。

所以我的建議還是先看代碼,不懂再查書,覺得js基礎不好,手邊備一本權威指南,一本滿足。


框架年年有,最近特別多,即使React,angular,vue都不存在了,JavaScript核心的東西一直存在,ES5,ES6……


想學react,就跳槽找份用react的公司,比如teambitain(如果不了解,可以用知乎搜一搜)?

否則就系統性學習原生JS吧!到你基本能看懂jQuery源碼就行了(如果公司的技術棧還是用jQuery,就可以考慮跳槽)


三大框架學完,實習都找不到,下一步學node.js.學完自殺。

另外建議學vue. vue學習成本相對低一點,有助於對框架宏觀把握。框架都差不多的。


個人現在很迷茫,如果非得選,會選原生Js來選,先前一個工作就是折騰了一個多月react然後做東西。現在覺得,原生js更重要。前端框架一年一個樣,很多東西好一點只是用法簡單的變了一下,不好的api全給你變了,要學嗎?


樓主太糾結了,作為一個老程序員,負責任的告訴你,你先弄哪塊都是一樣的。沒必要專門回頭研究JS,當然你在react學習中碰到不明白的JS的東西,就專門研究那一塊,最終的效果是一樣的。其實 你現在回頭系統的學JS,會發現80%的是在做重複學習,你需要的是惡補JS中較少用但又真正有用的概念,例如閉包之類,那些在現實中遇到問題回頭學習下可能更有效率。


強烈建議不要跟風,前端圈子現在很浮躁,還是要根據實際業務來定,夯實Js 基礎,一切都好說


唱個反調:先把react用起來,最好弄個項目。不明白的地方有針對性的再去學習。js基礎好根本就沒個標準,何來先把基礎學好?當然如果基本語法關都沒過就當我沒說好了。


其實就看你對自己的要求

如果你用ES6的語法寫React,那你不就是JS和React一起學習了嗎?

有什麼好迷茫的


推薦閱讀:

公司團隊有自己專職的UI設計師,但是前端團隊成員js能力薄弱,是否需要用bootstrap?
2018年一個合格的前端應該是什麼樣的?
2016 年的今天,Angular 1 還有什麼使用價值?
如何評價阿里巴巴最近開源的ANT DESIGN PRO?
前端 ,後端 關於數據交互的問題?

TAG:前端開發 | JavaScript | 前端工程師 | 前端框架 | React |