日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在你學習React之前必備的JavaScript基礎(chǔ)

寫在前面

為了不浪費大家的寶貴時間,在開頭申明一下,這篇文章針對的閱讀對象是:沒有寫過 React 或者剛剛才接觸 React 并且對于 ES6 的語法不太了解的同學,這是一篇基礎(chǔ)入門的文章,在一開始我并沒有準備翻譯一篇這樣的基礎(chǔ)文章,但是在閱讀完全文之后,我想起自己剛開始學習 React 時的迷茫,ES6 有那么多,我需要掌握多少呢?對于一個急于上手 React 寫代碼的人來說,這篇文章告訴你最基本要掌握的知識,讓你快速的寫起來。但是后期的提高,仍舊需要去夯實 Javascript 的基礎(chǔ)。

前言

在理想的狀態(tài)下,你可以在深入了解React之前了解 JavaScript 和Web 開發(fā)的所有知識。 不幸的是,我們生活在一個不***的世界,所以在 React 之前把所有的JavaScript 都咀嚼一遍只會讓你舉步維艱。 如果你已經(jīng)擁有一些 JavaScript 經(jīng)驗,那么在 React 之前你需要學習的只是實際用于開發(fā) React 應(yīng)用程序的 JavaScript 功能。 在學習 React之前你應(yīng)該學會的JavaScript 的知識點:

  •  ES6 類
  •  使用 let / const 聲明變量
  •  箭頭函數(shù)
  •  解構(gòu)賦值
  •  Map 和 filter
  •  ES6 模塊系統(tǒng)

這是你將在 80% 的時間內(nèi)使用的20% 的 JavaScript 新特性,因此在本文中,我將幫助你學習所有這些特性。

創(chuàng)建 React 應(yīng)用程序的探索

開始學習 React 的常見情況是運行 create-react-app 包,它會設(shè)置運行 React 所需的一切。 該過程完成之后,打開 src / app.js 這里給我們展示了整個應(yīng)用程序中唯一的 React 類:

 
 
 
  1. import React, { Component } from 'react';  
  2. import logo from './logo.svg';  
  3. import './App.css';  
  4. class App extends Component {  
  5.   render() {  
  6.     return (  
  7.         
  8.           
  9.             
  10.           

      

  11.             Edit src/App.js and save to reload.  
  12.           

      
  13.           
  14.             className="App-link"  
  15.               
  16.             target="_blank"  
  17.             rel="noopener noreferrer"  
  18.           >  
  19.             Learn React  
  20.             
  21.           
  22.       
  
  •     );  
  •   }  
  • }  
  • export default App; 
  • 如果之前你從未學習過 ES6 ,那么你可能認為這個 class 語句是 React 的一個特性。 實際上這是 ES6 的一個新特性,這就是為什么正確學習 ES6 可以讓你更好地理解 React 代碼。 我們將從 ES6 的類開始。

    ES6 的類

    ES6 引入了 class 語法,類似于 Java 或 Python 等 OO(面向?qū)ο? 語言。 ES6 中的基本類如下所示:

     
     
     
    1. class Developer {  
    2.   constructor(name){  
    3.     this.name = name;  
    4.   }  
    5.   hello(){  
    6.     return 'Hello World! I am ' + this.name + ' and I am a web developer';  
    7.   }  

    class 語法后跟一個可用于創(chuàng)建新對象的標識符(或一個名稱)。 始終在對象初始化中調(diào)用構(gòu)造函數(shù)方法。 傳遞給這個對象的任何參數(shù)都將傳遞給新對象。 例如:

     
     
     
    1. var nathan = new Developer('Nathan');  
    2. nathan.hello(); // Hello World! I am Nathan and I am a web developer 

    類可以定義任意它所需的方法,在這種情況下,我們定義了一個返回字符串的 hello 方法。

    類繼承

    類可以擴展另一個類的定義,從該類初始化的新對象將具有這兩個類的所有方法。

     
     
     
    1. class ReactDeveloper extends Developer {  
    2.   installReact(){  
    3.     return 'installing React .. Done.';  
    4.   }  
    5. }  
    6. var nathan = new ReactDeveloper('Nathan');  
    7. nathan.hello(); // Hello World! I am Nathan and I am a web developer  
    8. nathan.installReact(); // installing React .. Done. 

    繼承另一個類的類,通常稱為 child 類或 sub 類,而正在擴展的類稱為 parent 類或 super 類。 子類也可以覆蓋父類中定義的方法,這意味著它將使用自己定義的新方法來替換父類方法的定義。 例如,讓我們覆蓋 hello 函數(shù):

     
     
     
    1. class ReactDeveloper extends Developer {  
    2.   installReact(){  
    3.     return 'installing React .. Done.';  
    4.   } 
    5.   hello(){  
    6.     return 'Hello World! I am ' + this.name + ' and I am a REACT developer';  
    7.   }  
    8. }  
    9. var nathan = new ReactDeveloper('Nathan');  
    10. nathan.hello(); // Hello World! I am Nathan and I am a REACT developer 

    就這樣,我們重寫了 Developer 類中的 hello 方法。

    在React 中使用

    現(xiàn)在我們了解了 ES6 的類和繼承,我們可以理解 src / app.js 中定義的 React 類。 這是一個 React 組件,但它實際上只是一個普通的 ES6 類,它繼承了從 React 包導入的 React Component 類的定義。

     
     
     
    1. import React, { Component } from 'react';  
    2. class App extends Component {  
    3.   // class content  
    4.   render(){  
    5.     return (  
    6.       

      Hello React!

        
    7.     )  
    8.   }  

    這使得我們能夠使用 render() 方法,JSX ,this.state 和其他方法。 所有這些定義都在Component 類中。 但正如我們稍后將看到的,class 不是定義 React Component 的唯一方法。 如果你不需要狀態(tài)和其他生命周期方法,則可以使用函數(shù)。

    使用 ES6 中的 let 和 const 來聲明變量

    因為 JavaScript 的 var 關(guān)鍵字是聲明全局的變量,所以在 ES6 中引入了兩個新的變量聲明來解決這個問題,即 let 和 const 。 它們都用于聲明變量。 區(qū)別在于 const 在聲明后不能改變它的值,而 let 則可以。 這兩個聲明都是本地的,這意味著如果在函數(shù)作用域內(nèi)聲明 let ,則不能在函數(shù)外部調(diào)用它。

     
     
     
    1. const name = "David";  
    2. let age = 28;  
    3. var occupation = "Software Engineer"; 

    用哪個呢?

    按以往經(jīng)驗來說,默認使用 const 聲明變量。 稍后當您編寫應(yīng)用程序時,當你意識到 const 的值需要更改,才是你應(yīng)該將const 重構(gòu)為 let 時。 希望它會讓你習慣新的關(guān)鍵字,并且你將開始認識到應(yīng)用程序中需要使用 const 或 let 的模式。

    我們什么時候在 React 中使用呢?

    在我們需要變量的時候:

     
     
     
    1. import React, { Component } from 'react';  
    2. class App extends Component {  
    3.   // class content  
    4.   render(){  
    5.     const greeting = 'Welcome to React';  
    6.     return (  
    7.       

      {greeting}

        
    8.     )  
    9.   }  

    在整個應(yīng)用的生命周期中 greeting 并不會發(fā)生改變,所以我們在這里使用 const

    箭頭函數(shù)

    箭頭函數(shù)是 ES6 的一種新特性,在現(xiàn)代代碼庫中幾乎被廣泛使用,因為它使代碼簡潔易讀。 它允許我們使用更短的語法編寫函數(shù)。

     
     
     
    1. // regular function  
    2. const testFunction = function() {  
    3.   // content..  
    4. }  
    5. // arrow function  
    6. const testFunction = () => {  
    7.   // content..  

    如果您是一位經(jīng)驗豐富的 JS 開發(fā)人員,那么從常規(guī)函數(shù)語法轉(zhuǎn)換為箭頭語法可能會讓您感到不舒服。 當我學習箭頭函數(shù)時,我用這兩個簡單的步驟來重寫我的函數(shù):

    1.  移除 function 關(guān)鍵字
    2.  在 () 后面加上 =>

    括號仍然用于傳遞參數(shù),如果只有一個參數(shù),則可以省略括號。

     
     
     
    1. const testFunction = (firstName, lastName) => {  
    2.   return firstName+' '+lastName;  
    3. }  
    4. const singleParam = firstName => {  
    5.   return firstName;  

    隱藏的 return

    如果箭頭函數(shù)只有一行,則可以返回值而無需使用 return 關(guān)鍵字以及大括號。

     
     
     
    1. const testFunction = () => 'hello there.';  
    2. testFunction();  

    在 React 中的使用

     
     
     
    1. const HelloWorld = (props) => {  
    2.   return 

      {props.hello}

      ;  

    等同于 ES6 的類組件

     
     
     
    1. class HelloWorld extends Component {  
    2.   render() {  
    3.     return (  
    4.       

      {props.hello}

      ;  
    5.     );  
    6.   }  

    在 React 應(yīng)用程序中使用箭頭功能可使代碼更簡潔。 但它也會從組件中刪除狀態(tài)的使用。 這種類型的組件稱為無狀態(tài)功能組件。 你會在許多 React 教程中看到這個名字。

    解析數(shù)組和對象的賦值

    ES6 中引入的最有用的新語法之一,解構(gòu)賦值只是復制對象或數(shù)組的一部分并將它們放入命名變量中。 一個簡單的例子:

     
     
     
    1. const developer = {  
    2.   firstName: 'Nathan',  
    3.   lastName: 'Sebhastian',  
    4.   developer: true,  
    5.   age: 25,  
    6. }  
    7. //destructure developer object  
    8. const { firstName, lastName } = developer;  
    9. console.log(firstName); // returns 'Nathan'  
    10. console.log(lastName); // returns 'Sebhastian'  
    11. console.log(developer); // returns the object 

    如您所見,我們將開發(fā)人員對象中的 firstName 和 lastName 分配給新變量 firstName 和 lastName 。 現(xiàn)在,如果要將 firstName 放入名為 name 的新變量中,該怎么辦?

     
     
     
    1. const { firstName:name } = developer;  
    2. console.log(name); // returns 'Nathan' 

    解構(gòu)也適用于數(shù)組,使用索引而不是對象鍵:

     
     
     
    1. const numbers = [1,2,3,4,5];  
    2. const [one, two] = numbers; // one = 1, two = 2 

    你可以通過傳入 , 來在解構(gòu)的過程中跳過一些下標:

     
     
     
    1. const [one, two, , four] = numbers; // one = 1, two = 2, four = 4 

    在 React 中的使用

    最常見是在方法中解構(gòu) state:

     
     
     
    1. reactFunction = () => {  
    2.   const { name, email } = this.state;  
    3. }; 

    或者是在無狀態(tài)的函數(shù)組件中,結(jié)合之前提到的例子:

     
     
     
    1. const HelloWorld = (props) => {  
    2.   return 

      {props.hello}

      ;  

    我們可以立即簡單地解構(gòu)參數(shù):

     
     
     
    1. const HelloWorld = ({ hello }) => {  
    2.   return 

      {hello}

      ;  

    Map 和 filter

    雖然本文側(cè)重于 ES6 ,但需要提及 JavaScript 數(shù)組 Map 和 filter 方法,因為它們可能是構(gòu)建 React 應(yīng)用程序時最常用的 ES5 功能之一。 特別是在處理數(shù)據(jù)上。

    這兩種方法在處理數(shù)據(jù)時使用得更多。 例如,假設(shè)從 API 結(jié)果中獲取返回 JSON 數(shù)據(jù)的數(shù)組:

     
     
     
    1. const users = [  
    2.   { name: 'Nathan', age: 25 },  
    3.   { name: 'Jack', age: 30 },  
    4.   { name: 'Joe', age: 28 },  
    5. ]; 

    然后我們可以在 React 中呈現(xiàn)項目列表,如下所示:

     
     
     
    1. import React, { Component } from 'react';  
    2. class App extends Component {  
    3.   // class content  
    4.   render(){  
    5.     const users = [  
    6.       { name: 'Nathan', age: 25 },  
    7.       { name: 'Jack', age: 30 },  
    8.       { name: 'Joe', age: 28 },  
    9.     ];  
    10.     return (  
    11.       
          
      •         {users  
      •           .map(user => 
      • {user.name}
      • )  
      •         }  
      •       
        
    12.     )  
    13.   }  

    我們同樣可以在 render 中篩選數(shù)據(jù)

     
     
     
      •   
      •   {users  
      •     .filter(user => user.age > 26)  
      •     .map(user => 
      • {user.name}
      • )  
      •   }  
       

    ES6 模塊系統(tǒng)

    ES6 模塊系統(tǒng)使 JavaScript 能夠?qū)牒蛯С鑫募?讓我們再看一下 src / app.js 代碼來解釋這一點。

     
     
     
    1. import React, { Component } from 'react';  
    2. import logo from './logo.svg';  
    3. import './App.css';  
    4. class App extends Component {  
    5.   render() {  
    6.     return (  
    7.         
    8.           
    9.             
    10.           

        

    11.             Edit src/App.js and save to reload.  
    12.           

        
    13.           
    14.             className="App-link"  
    15.               
    16.             target="_blank"  
    17.             rel="noopener noreferrer"  
    18.           >  
    19.             Learn React  
    20.             
    21.           
    22.       
      
  •     );  
  •   }  
  • }  
  • export default App; 
  • 在***行代碼中我們看到 import 語句:

     
     
     
    1. import React, { Component } from 'react'; 

    在***行代碼中我們看到 export default 語句:

     
     
     
    1. export default App; 

    要理解這些語句,我們先討論模塊語法。

    模塊只是一個 JavaScript 文件,它使用 export 關(guān)鍵字導出一個或多個值(可以是對象,函數(shù)或變量)。 首先,在 src 目錄中創(chuàng)建一個名為 util.js 的新文件

     
     
     
    1. touch util.js 

    然后我們在這里面寫一個函數(shù),使用一個默認導出

     
     
     
    1. export default function times(x) {  
    2.   return x * x;  

    或多個命名的導出

     
     
     
    1. export function times(x) {  
    2.   return x * x;  
    3. }  
    4. export function plusTwo(number) {  
    5.   return number + 2;  

    然后我們可以在 src/App.js 中引入它。

     
     
     
    1. import { times, plusTwo } from './util.js';  
    2. console.log(times(2));  
    3. console.log(plusTwo(3)); 

    每個模塊可以有多個命名導出但只有一個默認導出。 可以導入默認導出,而無需使用花括號和相應(yīng)的導出函數(shù)名稱:

     
     
     
    1. // in util.js  
    2. export default function times(x) {  
    3.   return x * x;  
    4. }  
    5. // in app.js  
    6. export k from './util.js';  
    7. console.log(k(4)); // returns 16 

    但是對于命名導出,必須使用花括號和確切名稱導入。 或者,import可以使用別名來避免兩個不同的導入具有相同的名稱:

     
     
     
    1. // in util.js  
    2. export function times(x) {  
    3.   return x * x;  
    4. }  
    5. export function plusTwo(number) {  
    6.   return number + 2;  
    7. }  
    8. // in app.js  
    9. import { times as multiplication, plusTwo as plus2 } from './util.js'; 

    直接這樣引入名稱:

     
     
     
    1. import React from 'react'; 

    將使 JavaScript 檢查node_modules 以獲取相應(yīng)的包名稱。 因此,如果您要導入本地文件,請不要忘記使用正確的路徑。

    在 React 中使用

    顯然我們已經(jīng)在 src / App.js 文件中看到了這個,然后在 index.js 文件中看到了導出的 App 組件的呈現(xiàn)方式。 我們暫時忽略 serviceWorker 部分。

     
     
     
    1. //index.js file  
    2. import React from 'react';  
    3. import ReactDOM from 'react-dom';  
    4. import './index.css';  
    5. import App from './App';  
    6. import * as serviceWorker from './serviceWorker';  
    7. ReactDOM.render(, document.getElementById('root'));  
    8. // If you want your app to work offline and load faster, you can change  
    9. // unregister() to register() below. Note this comes with some pitfalls.  
    10. // Learn more about service workers: http://bit.ly/CRA-PWA  
    11. serviceWorker.unregister(); 

    請注意如何從 ./App 目錄導入 App ,并省略了 .js 擴展名。 我們只能在導入 JavaScript 文件時省略文件擴展名,但在其他文件中我們必須包含擴展名,例如 .css 。 我們還導入另一個 node 模塊 react-dom ,這使我們能夠?qū)?React 組件呈現(xiàn)為 HTML元素。

    至于 PWA ,它是使 React 應(yīng)用程序脫機工作的一項功能,但由于默認情況下它已被禁用,因此無需在開始時學習它。 在你有足夠的信心構(gòu)建 React 用戶界面之后,***學習 PWA 。

    總結(jié)

    React 的優(yōu)點在于它不會像其他 Web 框架一樣在 JavaScript 之上添加任何外部抽象層。 這就是為什么 React 變得非常受 JS 開發(fā)人員歡迎的原因。 它只是使用***的 JavaScript 來使構(gòu)建用戶界面更容易和可維護。 在 React 應(yīng)用程序中,確實有比 React specix 語法更多的 JavaScript ,所以一旦你更好地理解了 JavaScript - 特別是 ES6 - 你就可以自信地編寫 React 應(yīng)用程序了。 但這并不意味著您必須掌握 JavaScript 的所有內(nèi)容才能開始編寫 React 應(yīng)用程序。 現(xiàn)在去寫一個,隨著機會的到來,你將成為一個更好的開發(fā)者。

    感謝閱讀,我希望你學到一些新東西:)


    本文標題:在你學習React之前必備的JavaScript基礎(chǔ)
    網(wǎng)頁鏈接:http://www.5511xx.com/article/dpidhge.html