.

進擊的react - https://zhuanlan.zhihu.com/advancing-react


面試中問什么react問題 - https://zhuanlan.zhihu.com/p/28176065


入門級問題

  • 什么是JSX
  • state 和 props 有什么區別
  • React 是哪個公司貢獻的開源代碼

進階級問題

  • 什么時候應該選擇用class實現一個組件,什么時候應該用一個函數實現一個組件

  • 能描述一下React組件的各個聲明周期函數嗎

  • 什么是shouldComponentUpdate函數?有什么作用

  • 當組件的setSatate函數被調用之后,會發生什么

  • 為什么我們利用循環產生的組件中要用key這個特殊的psop

高手級問題

  • setState可以接受函數作為參數嗎?有什么作用

  • 什么是HoC(Higher-Order Component)?適用于什么場景

  • 什么是Fiber?是為了解決什么問題

  • 兩個并不是父子關系的組件,如何實現相互的消息傳遞?請想出盡量多的辦法,并說說各自的優缺點

  • 如果你能夠改進React的一樣功能,那會是哪一個功能


React新的前端思維方式

1 - 如何初始化一個React項目

// 全局安裝快速來發React應用的工具
npm install --global create-react-app

// 在當前目錄下創建指定參數名的應用目錄
create-react-app first_react_app

cd first_react_app
npm start

2 - 如何創建一個React組件(能完成某個特定功能的獨立的可重用的代碼)

  • 定義組件
// 從reacr 庫中引入React 和 Component
import React, { Component } from 'react';

// 使用ES6的語法來構建組件類,Component作為所有組件的基類,提供了很多組件共有的功能
class ClickCounter extends Component {}
  • 導入組件
// import是ES6語法中導入文件模塊的方式,
// 兼容性問題,ES6語法的JavaScript代碼會被webpack 和 babel 轉譯成所有瀏覽器都支持的ES5語法
import ClickCounter from './ClickCounter'
  • 定義組件的方式
    • React.createClass方式創建組件類,這種方法已經被廢棄了
    • 使用ES6的語法來構建組件類

3 - JSX

  • 什么是JSX

    • JSX是JavaScript的語法擴展,讓我們在JavaScript中可以編寫想HTML一樣的代碼
  • JSX 和 HTML 有什么區別

    • JSX中使用的 “元素”不局限于HTML中的元素,可以是任何一個React組件
    • React判斷一個元素是HTML元素還是React組件的原則就是看第一個字母是否大寫
    • 在JSX中可以通過onClick這樣的方式給一個元素添加事件處理函數,在HTML中不建議
  • JSX是進步還是倒退

    • HTML代表內容,CSS代表樣式,JavaScript定義交互行為,實際上是把不同的技術分來管理了,而不是邏輯上的“分而治之”
    • 做同一件事的代碼應該有高耦合性的設計原則
  • JSX中使用onClick添加事件處理函數和HTML的onclick有很大的不同

    • HTML中的onclick添加的事件處理函數是在全局環境下執行的,這污染了全局環境
    • HTML中給很多DOM元素添加onclick事件,可能會影響網頁的性能,畢竟,網頁需要的事件處理函數越多,性能就會越低
    • HTML中對于使用onclick的DOM元素,如果要動態的從DOM樹中刪除掉的話,需要把對應的事件處理器注銷,否則內存泄漏
    • JSX中一個組件使用了onClick,并沒有產生直接使用onclick的HTML,而是使用了事件委托的方式處理點擊事件,無論有多少個onClick出現,其實最后都只在DOM書上添加了一個事件處理點擊事件,掛在最頂層的DOM節點上
    • 所有的點擊事件都被這個事件處理函數捕獲,然后根據具體組件分配給特定函數,使用事件委托的性能當然要比為每個onClick都掛載一個事件處理函數要高
    • React控制組件的生命周期,在unmount的時候清除相關事件處理函數

4 - React的工作方式

  • jQuery如何工作

    • 選中一些DOM元素,然后對這些元素做一些操作
  • React的理念

    • 渲染。React的工作方式把開發者從繁瑣的操作中解放出來,開發者只需要關心“我想要顯示什么”,而不用操心“怎么去做”

    • UI=render(data)。用戶看到的界面(UI),應該是一個函數(render)的執行結果,只接受數據(data)作為參數

    • 純函數。指的是沒有任何副作用,輸出完全依賴于輸入的函數,兩次函數調用如果輸入相同,得到的結果也絕對相同。

    • 通過數據驅動渲染,重復渲染來實現用戶交互,這樣重復渲染的效率會不會太低了呢?

  • Virtual DOM

    • React利用Virtual DOM,讓每次渲染都只重新渲染最少的DOM元素

    • 瀏覽器為了渲染HTML格式的網頁,會先將HTML文本解析以構建DOM樹,然后根據DOM樹渲染出用戶看到的界面,當要改變界面內容的時候,就去給編DOM樹上的節點

    • 盡量減少DOM操作。DOM操作會引起瀏覽器對網頁進行重新布局,重新繪制,影響性能

    • DOM樹是對HTML的抽象,Virtual DOM就是對DOM樹的抽象。Virtual DOM不會觸及瀏覽器的部分,只是存在于JavaScript空間的樹形結構,每次自上而下渲染React組件時,會對比這一次產生的Virtual DOM和上一次渲染的Virtual Dom,對比就會發現差別,然后修改真正的DOM樹時就只需要觸及差別中的部分就行

設計高質量的React組件


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 原教程內容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,860評論 1 18
  • 本筆記基于React官方文檔,當前React版本號為15.4.0。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,807評論 14 128
  • 參考文章:深度剖析:如何實現一個Virtual DOM 算法 作者:戴嘉華React中一個沒人能解釋清楚的問題——...
    waka閱讀 5,995評論 0 21
  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,107評論 2 35
  • 1. 你經常說,年齡只是個數字,不代表什么事兒。你不太在乎生日怎么過。 2. 你下一步干什么已經有規律可循,可以預...
    午夜茶閱讀 7,829評論 31 56