国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[譯] 在你學(xué)習(xí) React 之前必備的 JavaScript 基礎(chǔ)

Chaz / 3581人閱讀

摘要:前言在理想的狀態(tài)下,你可以在深入了解之前了解和開發(fā)的所有知識。繼承另一個類的類,通常稱為類或類,而正在擴展的類稱為類或類。這種類型的組件稱為無狀態(tài)功能組件。在你有足夠的信心構(gòu)建用戶界面之后,最好學(xué)習(xí)。

原文地址:JavaScript Basics Before You Learn React

原文作者: Nathan Sebhastian

寫在前面

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

前言

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

ES6

使用 let / const 聲明變量

箭頭函數(shù)

解構(gòu)賦值

Mapfilter

ES6 模塊系統(tǒng)

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

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

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

import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";

class App extends Component {
  render() {
    return (
      

Edit src/App.js and save to reload.

Learn React
); } } export default App;

如果之前你從未學(xué)習(xí)過 ES6 ,那么你可能認(rèn)為這個 class 語句是 React 的一個特性。 實際上這是 ES6 的一個新特性,這就是為什么正確學(xué)習(xí) ES6 可以讓你更好地理解 React 代碼。 我們將從 ES6 的類開始。

ES6 的類

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

class Developer {
  constructor(name){
    this.name = name;
  }

  hello(){
    return "Hello World! I am " + this.name + " and I am a web developer";
  }
}

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

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

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

類繼承

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

class ReactDeveloper extends Developer {
  installReact(){
    return "installing React .. Done.";
  }
}

var nathan = new ReactDeveloper("Nathan");
nathan.hello(); // Hello World! I am Nathan and I am a web developer
nathan.installReact(); // installing React .. Done.

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

class ReactDeveloper extends Developer {
  installReact(){
    return "installing React .. Done.";
  }

  hello(){
    return "Hello World! I am " + this.name + " and I am a REACT developer";
  }
}

var nathan = new ReactDeveloper("Nathan");
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 包導(dǎo)入的 React Component 類的定義。

import React, { Component } from "react";

class App extends Component {
  // class content
  render(){
    return (
      

Hello React!

) } }

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

使用 ES6 中的 letconst 來聲明變量

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

const name = "David";
let age = 28;
var occupation = "Software Engineer";
用哪個呢?

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

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

在我們需要變量的時候:

import React, { Component } from "react";

class App extends Component {
  // class content
  render(){
    const greeting = "Welcome to React";
    return (
      

{greeting}

) } }

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

箭頭函數(shù)

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

// regular function
const testFunction = function() {
  // content..
}

// arrow function
const testFunction = () => {
  // content..
}

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

移除 function 關(guān)鍵字

() 后面加上 =>

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

const testFunction = (firstName, lastName) => {
  return firstName+" "+lastName;
}

const singleParam = firstName => {
  return firstName;
}
隱藏的 return

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

const testFunction = () => "hello there.";
testFunction(); 
React 中的使用
const HelloWorld = (props) => {
  return 

{props.hello}

; }

等同于 ES6 的類組件

class HelloWorld extends Component {
  render() {
    return (
      

{props.hello}

; ); } }

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

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

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

const developer = {
  firstName: "Nathan",
  lastName: "Sebhastian",
  developer: true,
  age: 25,
}

//destructure developer object
const { firstName, lastName } = developer;
console.log(firstName); // returns "Nathan"
console.log(lastName); // returns "Sebhastian"
console.log(developer); // returns the object

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

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

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

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

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

const [one, two, , four] = numbers; // one = 1, two = 2, four = 4
React 中的使用

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

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

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

const HelloWorld = (props) => {
  return 

{props.hello}

; }

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

const HelloWorld = ({ hello }) => {
  return 

{hello}

; }
Mapfilter

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

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

const users = [
  { name: "Nathan", age: 25 },
  { name: "Jack", age: 30 },
  { name: "Joe", age: 28 },
];

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

import React, { Component } from "react";

class App extends Component {
  // class content
  render(){
    const users = [
      { name: "Nathan", age: 25 },
      { name: "Jack", age: 30 },
      { name: "Joe", age: 28 },
    ];

    return (
      
    {users .map(user =>
  • {user.name}
  • ) }
) } }

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

    {users .filter(user => user.age > 26) .map(user =>
  • {user.name}
  • ) }
ES6 模塊系統(tǒng)

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

import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";

class App extends Component {
  render() {
    return (
      

Edit src/App.js and save to reload.

Learn React
); } } export default App;

在第一行代碼中我們看到 import 語句:

import React, { Component } from "react";

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

export default App;

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

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

touch util.js

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

export default function times(x) {
  return x * x;
}

或多個命名的導(dǎo)出

export function times(x) {
  return x * x;
}

export function plusTwo(number) {
  return number + 2;
}

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

import { times, plusTwo } from "./util.js";

console.log(times(2));
console.log(plusTwo(3));

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

// in util.js
export default function times(x) {
  return x * x;
}

// in app.js
export k from "./util.js";

console.log(k(4)); // returns 16

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

// in util.js
export function times(x) {
  return x * x;
}

export function plusTwo(number) {
  return number + 2;
}

// in app.js
import { times as multiplication, plusTwo as plus2 } from "./util.js";

直接這樣引入名稱:

import React from "react";

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

在 React 中使用

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

//index.js file

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";

ReactDOM.render(, document.getElementById("root"));

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: http://bit.ly/CRA-PWA
serviceWorker.unregister();

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

至于 PWA ,它是使 React 應(yīng)用程序脫機工作的一項功能,但由于默認(rèn)情況下它已被禁用,因此無需在開始時學(xué)習(xí)它。 在你有足夠的信心構(gòu)建 React 用戶界面之后,最好學(xué)習(xí) 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ā)者。
感謝閱讀,我希望你學(xué)到一些新東西:)

最后

小冊 你不知道的 Chrome 調(diào)試技巧 已經(jīng)開始預(yù)售啦。

歡迎關(guān)注公眾號 「前端惡霸」,掃碼關(guān)注,會有很多好東西等著你~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104320.html

相關(guān)文章

  • 】一個小時搭建一個全棧Web應(yīng)用框架(上)

    摘要:初始項目設(shè)置我們將使用包管理器來處理依賴項。使用包管理器可以使您的項目依賴項保持最新狀態(tài),并能夠獲取和安裝最新的包。是小型應(yīng)用的最佳選擇之一。 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:Creating a full-stack web application with Python, NPM, Webpack and React英文原文:https://codeburst.io/creating....

    wizChen 評論0 收藏0
  • 】一個小時搭建一個全棧Web應(yīng)用框架(上)

    摘要:初始項目設(shè)置我們將使用包管理器來處理依賴項。使用包管理器可以使您的項目依賴項保持最新狀態(tài),并能夠獲取和安裝最新的包。是小型應(yīng)用的最佳選擇之一。 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:Creating a full-stack web application with Python, NPM, Webpack and React英文原文:https://codeburst.io/creating....

    Doyle 評論0 收藏0
  • []學(xué)習(xí)如何去學(xué)習(xí) JavaScript - 5 個你應(yīng)該如何花在學(xué)習(xí) JS 上時間建議

    摘要:擁抱異步編程縱觀發(fā)展史也可以說成開發(fā)的發(fā)展史,你會發(fā)現(xiàn)異步徹底改變了這場游戲。可以這么說,異步編程已成為開發(fā)的根基。這也是你應(yīng)盡早在上投入大量時間的一處核心知識點,這其中包含和等重要概念。這也是最突出的一項貢獻(xiàn)。 原文地址:Medium - Learning How to Learn JavaScript. 5 recommendations on how you should spend ...

    wanglu1209 評論0 收藏0
  • 那些年,我前端/Java后端書單

    摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...

    fxp 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<