国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面試 React 框架八股文十問十答第十一期

這篇具有很好參考價值的文章主要介紹了面試 React 框架八股文十問十答第十一期。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

面試 React 框架八股文十問十答第十一期

作者:程序員小白條,個人博客

相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新!

?點贊?收藏?不迷路!?文章來源地址http://www.zghlxwxcb.cn/news/detail-801996.html

1)React 與 Vue 的 diff 算法有何不同?

React 和 Vue 在處理虛擬 DOM 的 diff 算法上有一些不同之處:

  • React: 使用深度優(yōu)先搜索策略,通過同層比較和唯一 key 來盡早發(fā)現(xiàn)不同之處。React 的 diff 算法是基于組件實例,而且在更新時會銷毀舊組件并創(chuàng)建新組件。
  • Vue: 使用雙指針算法,采用一種更接近模板的結(jié)構(gòu)。Vue 的 diff 算法是基于模板的指令,通過比較模板中的指令來更新 DOM。Vue 2.x 使用的是一種“先序深度優(yōu)先”的策略。

雖然兩者在實現(xiàn)細節(jié)上有差異,但目標都是盡量減少實際 DOM 操作,提高性能。

2)React組件命名推薦的方式是哪個?

在 React 中,組件命名的一般約定是采用帕斯卡命名法(PascalCase),即首字母大寫,例如:

class MyComponent extends React.Component {
  // ...
}

這種命名方式有助于區(qū)分 React 組件與普通的 HTML 元素,也符合 React 社區(qū)的一致性約定。

3)react 最新版本解決了什么問題,增加了哪些東西

React 16.x的三大新特性 Time Slicing、Suspense、 hooks

  • Time Slicing(解決CPU速度問題)使得在執(zhí)行任務(wù)的期間可以隨時暫停,跑去干別的事情,這個特性使得react能在性能極其差的機器跑時,仍然保持有良好的性能
  • Suspense (解決網(wǎng)絡(luò)IO問題) 和lazy配合,實現(xiàn)異步加載組件。 能暫停當前組件的渲染, 當完成某件事以后再繼續(xù)渲染,解決從react出生到現(xiàn)在都存在的「異步副作用」的問題,而且解決得非的優(yōu)雅,使用的是 T異步但是同步的寫法,這是最好的解決異步問題的方式
  • 提供了一個內(nèi)置函數(shù)componentDidCatch,當有錯誤發(fā)生時,可以友好地展示 fallback 組件; 可以捕捉到它的子元素(包括嵌套子元素)拋出的異常; 可以復(fù)用錯誤組件。

(1)React16.8 加入hooks,讓React函數(shù)式組件更加靈活,hooks之前,React存在很多問題:

  • 在組件間復(fù)用狀態(tài)邏輯很難
  • 復(fù)雜組件變得難以理解,高階組件和函數(shù)組件的嵌套過深。
  • class組件的this指向問題
  • 難以記憶的生命周期

hooks很好的解決了上述問題,hooks提供了很多方法

  • useState 返回有狀態(tài)值,以及更新這個狀態(tài)值的函數(shù)
  • useEffect 接受包含命令式,可能有副作用代碼的函數(shù)。
  • useContext 接受上下文對象(從 React.createContext返回的值)并返回當前上下文值,
  • useReducer useState 的替代方案。接受類型為 (state,action)=> newState的reducer,并返回與dispatch方法配對的當前狀態(tài)。
  • useCalLback 返回一個回憶的memoized版本,該版本僅在其中一個輸入發(fā)生更改時才會更改。純函數(shù)的輸入輸出確定性 o useMemo 純的一個記憶函數(shù) o useRef 返回一個可變的ref對象,其Current 屬性被初始化為傳遞的參數(shù),返回的 ref 對象在組件的整個生命周期內(nèi)保持不變。
  • useImperativeMethods 自定義使用ref時公開給父組件的實例值
  • useMutationEffect 更新兄弟組件之前,它在React執(zhí)行其DOM改變的同一階段同步觸發(fā)
  • useLayoutEffect DOM改變后同步觸發(fā)。使用它來從DOM讀取布局并同步重新渲染

4)react 實現(xiàn)一個全局的 dialog

要在 React 中實現(xiàn)一個全局的 dialog,可以使用 React 的 Context API 或者狀態(tài)管理庫,例如 Redux。以下是一個簡單的例子,使用 React Context API:

// DialogContext.js
import React, { createContext, useState, useContext } from 'react';

const DialogContext = createContext();

export const DialogProvider = ({ children }) => {
  const [isOpen, setIsOpen] = useState(false);
  const [content, setContent] = useState(null);

  const openDialog = (newContent) => {
    setContent(newContent);
    setIsOpen(true);
  };

  const closeDialog = () => {
    setContent(null);
    setIsOpen(false);
  };

  return (
    <DialogContext.Provider value={{ isOpen, openDialog, closeDialog }}>
      {children}
      {isOpen && content && <div className="dialog">{content}</div>}
    </DialogContext.Provider>
  );
};

export const useDialog = () => {
  return useContext(DialogContext);
};

在應(yīng)用的頂層組件中,使用 DialogProvider 包裹整個應(yīng)用:

// App.js
import React from 'react';
import { DialogProvider } from './DialogContext';
import MyComponent from './MyComponent';

const App = () => {
  return (
    <DialogProvider>
      <MyComponent />
    </DialogProvider>
  );
};

export default App;

在任何需要彈出 dialog 的組件中,可以使用 useDialog hook:

// MyComponent.js
import React from 'react';
import { useDialog } from './DialogContext';

const MyComponent = () => {
  const { openDialog } = useDialog();

  const handleClick = () => {
    openDialog(<p>This is a dialog content.</p>);
  };

  return (
    <div>
      <button onClick={handleClick}>Open Dialog</button>
    </div>
  );
};

export default MyComponent;

5)React 數(shù)據(jù)持久化有什么實踐嗎?

在 React 應(yīng)用中,數(shù)據(jù)持久化通常涉及到將應(yīng)用的狀態(tài)保存到本地存儲或者其他持久化存儲中,以便在頁面刷新或用戶關(guān)閉應(yīng)用后能夠恢復(fù)之前的狀態(tài)。以下是一些 React 數(shù)據(jù)持久化的實踐方法:

  • 使用 Web Storage API: 使用 localStoragesessionStorage 可以將數(shù)據(jù)保存在瀏覽器的本地存儲中。這對于小量數(shù)據(jù)而言是一個簡單有效的方案。
// 保存數(shù)據(jù)到 localStorage
localStorage.setItem('key', JSON.stringify(data));

// 從 localStorage 恢復(fù)數(shù)據(jù)
const storedData = JSON.parse(localStorage.getItem('key'));
  • 使用 Cookies: 如果需要在客戶端和服務(wù)器之間傳遞數(shù)據(jù),可以使用 Cookies 進行數(shù)據(jù)持久化。
// 設(shè)置 Cookie
document.cookie = 'key=value; expires=Thu, 18 Dec 2022 12:00:00 UTC; path=/';

// 讀取 Cookie
const storedValue = document.cookie.replace(/(?:(?:^|.*;\s*)key\s*=\s*([^;]*).*$)|^.*$/, '\$1');
  • 使用 IndexedDB: IndexedDB 是一個瀏覽器端的數(shù)據(jù)庫,可以存儲大量結(jié)構(gòu)化數(shù)據(jù)。
  • 使用狀態(tài)管理庫: 如果應(yīng)用使用狀態(tài)管理庫(如 Redux),可以結(jié)合中間件將狀態(tài)保存到本地存儲中,以便在刷新頁面后恢復(fù)狀態(tài)。

6)對 React 和 Vue 的理解,它們的異同

React 和 Vue 都是流行的前端框架,用于構(gòu)建用戶界面,但它們有一些顯著的異同點:

相似之處:

  • 組件化: React 和 Vue 都采用了組件化的開發(fā)模式,允許開發(fā)者將應(yīng)用拆分成可復(fù)用的組件。
  • 虛擬 DOM: 兩者都使用虛擬 DOM 機制來提高性能,通過在內(nèi)存中維護一個虛擬的 DOM 樹來減少實際 DOM 操作。
  • 響應(yīng)式: Vue 和 React 都支持響應(yīng)式數(shù)據(jù)綁定,當數(shù)據(jù)變化時,視圖會自動更新。

不同之處:

  • 語法: React 使用 JSX(JavaScript XML)語法,它是一種 JavaScript 的擴展,允許在 JavaScript 中編寫類似 XML/HTML 的代碼。而 Vue 使用模板語法,可以在 HTML 模板中直接插入表達式和指令。
  • 學習曲線: Vue 被認為是學習曲線較平緩的框架,適合初學者。React 的學習曲線可能相對陡峭,尤其是對于理解 JSX 和一些高級概念的開發(fā)者。
  • 狀態(tài)管理: 在狀態(tài)管理上,React 通常使用庫如 Redux 進行全局狀態(tài)管理,而 Vue 內(nèi)置了 Vuex 來處理全局狀態(tài)。

總體而言,React 更注重靈活性和可組合性,而 Vue 更注重開箱即用和簡單性。選擇使用哪個框架通常取決于團隊的經(jīng)驗、項目的需求以及開發(fā)者個人的偏好。

7)可以使用TypeScript寫React應(yīng)用嗎?怎么操作?

是的,可以使用 TypeScript 來編寫 React 應(yīng)用。React 官方提供了對 TypeScript 的原生支持,通過安裝相應(yīng)的包即可開始在項目中使用 TypeScript。

以下是一些基本步驟:

  1. 創(chuàng)建 React 項目: 使用 Create React App 工具來初始化一個 React 項目。

    npx create-react-app my-react-app --template typescript
    

    這會創(chuàng)建一個帶有 TypeScript 配置的 React 項目。

  2. 安裝 TypeScript 支持: 如果你的項目沒有使用 Create React App,你需要手動安裝 TypeScript 和相關(guān)的類型定義。

    npm install --save typescript @types/react @types/react-dom @types/node
    
  3. 將文件重命名為 .tsx 將 React 組件的文件后綴從 .js.jsx 改為 .tsx,以告訴 TypeScript 這是一個包含 JSX 的文件。

  4. 編寫 TypeScript 代碼:.tsx 文件中編寫 React 組件,并使用 TypeScript 的類型系統(tǒng)來提高代碼的健壯性。

    // ExampleComponent.tsx
    import React from 'react';
    
    interface Props {
      message: string;
    }
    
    const ExampleComponent: React.FC<Props> = ({ message }) => {
      return <div>{message}</div>;
    };
    
    export default ExampleComponent;
    

現(xiàn)在,你可以在 React 項目中使用 TypeScript 編寫組件,并利用 TypeScript 提供的類型檢查和智能提示功能。

8)React 設(shè)計思路,它的理念是什么?

React 的設(shè)計思路主要包括以下幾個核心理念:

  • 虛擬 DOM: React 使用虛擬 DOM 來提高性能。虛擬 DOM 是在內(nèi)存中對真實 DOM 的一種輕量級表示,通過比較虛擬 DOM 的差異來最小化實際 DOM 操作,從而提高渲染效率。
  • 單向數(shù)據(jù)流: React 強調(diào)單向數(shù)據(jù)流,即數(shù)據(jù)的流動是單向的,從父組件傳遞到子組件。這有助于更容易追蹤和理解數(shù)據(jù)的變化,同時也使得組件更容易被復(fù)用。
  • 組件化: React 提倡組件化開發(fā),將用戶界面劃分為小而獨立的組件,每個組件負責自己的狀態(tài)和渲染邏輯。這種模塊化的設(shè)計使得代碼更易維護、測試和復(fù)用。
  • 聲明式編程: React 采用聲明式編程風格,開發(fā)者只需描述目標的狀態(tài),而非步驟如何實現(xiàn)。這使得代碼更易讀、理解和維護。
  • 狀態(tài)提升: React 鼓勵將共享狀態(tài)提升到最近的共同祖先組件,以保持組件之間的數(shù)據(jù)同步。這有助于避免狀態(tài)的不一致性問題。

總體而言,React 的設(shè)計思路旨在提供一種簡潔、高效、易于理解和維護的方式來構(gòu)建用戶界面,通過引入虛擬 DOM、單向數(shù)據(jù)流等概念來優(yōu)化性能和開發(fā)體驗。

9)React中props.children和React.Children的區(qū)別

  • props.children 是一個特殊的 prop,表示組件的所有子節(jié)點。當在 JSX 中使用組件時,該組件的所有子元素會被作為 props.children 傳遞給該組件。在組件內(nèi)部,你可以直接通過 props.children 訪問和處理這些子節(jié)點。

    // ExampleComponent.js
    const ExampleComponent = (props) => {
      return (
        <div>
          {props.children}
        </div>
      );
    };
    
    // 使用 ExampleComponent
    <ExampleComponent>
      <p>Hello, world!</p>
    </ExampleComponent>
    
  • React.Children 是一個 React 提供的工具類,用于處理 props.children。它提供了一些方法,例如 React.Children.map、React.Children.forEach 等,用于遍歷和處理 props.children 中的子元素。

    // 使用 React.Children.map 處理 props.children
    React.Children.map(props.children, child => {
      // 對每個子元素進行處理
    });
    

總的來說,props.children 是一個用于接收和直接訪問子元素的 prop,而 React.Children 提供了一些工具方法,使得在處理 props.children 時更加方便。

10)React的狀態(tài)提升是什么?使用場景有哪些?

狀態(tài)提升(Lifting State Up): 狀態(tài)提升是指將組件的狀態(tài)移動到該組件的共同祖先組件中。通過將狀態(tài)提升到更高層級的組件,可以確保共享狀態(tài)的一致性,并且使得狀態(tài)變化更易于追蹤和管理。

使用場景:

  1. 共享狀態(tài): 當多個組件需要訪問和共享相同的狀態(tài)時,將這個狀態(tài)提升到它們的最近共同祖先組件中。這樣,所有子組件都可以通過 props 訪問并修改這個狀態(tài)。
  2. 避免狀態(tài)不一致: 當多個組件需要依賴相同的狀態(tài)進行渲染時,通過狀態(tài)提升可以避免狀態(tài)不一致的問題。所有組件都使用相同的狀態(tài),保持視圖的一致性。
  3. 簡化組件邏輯: 將狀態(tài)提升可以使得每個組件的邏輯更簡單,因為它們只需要關(guān)注自己的渲染和交互,而共享狀態(tài)的管理由父組件負責。
  4. 提高可維護性: 狀態(tài)提升使得狀態(tài)集中管理,提高了代碼的可維護性。在一個地方修改狀態(tài)會影響所有依賴于該狀態(tài)的組件。

例子:

// 狀態(tài)提升前
const ParentComponent = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <ChildComponent count={count} setCount={setCount} />
      <AnotherChildComponent count={count} />
    </div>
  );
};

// 狀態(tài)提升后
const ParentComponent = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <ChildComponent count={count} setCount={setCount} />
      <AnotherChildComponent count={count} setCount={setCount} />
    </div>
  );
};

在這個例子中,將 count 狀態(tài)提升到 ParentComponent,使得兩個子組件都可以訪問和修改相同的狀態(tài)。這樣就避免了狀態(tài)不一致的問題,同時也使得組件的邏輯更加清晰。

開源項目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

已 300 + Star!

?點贊?收藏?不迷路!?

到了這里,關(guān)于面試 React 框架八股文十問十答第十一期的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 面試 React 框架八股文十問十答第四期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)哪些方法會觸發(fā) React 重新渲染?重新渲染 render 會做些什么? React 中的重新渲染可以由以下幾種情況觸發(fā): 狀態(tài)變化(State Change

    2024年01月25日
    瀏覽(32)
  • 面試 React 框架八股文十問十答第五期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)對 React context 的理解 React Context 是 React 中用于跨多層級傳遞數(shù)據(jù)的一種方式,可以讓組件之間共享一些全局的狀態(tài),而不需要通過

    2024年01月18日
    瀏覽(18)
  • 面試 React 框架八股文十問十答第十期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)為什么 useState 要使用數(shù)組而不是對象 在React中, useState 的設(shè)計選擇使用數(shù)組而不是對象是為了提高性能和簡化實現(xiàn)。數(shù)組的方式使

    2024年01月17日
    瀏覽(24)
  • 面試 React 框架八股文十問十答第十二期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)React中constructor和getInitialState的區(qū)別? 在React中, constructor 和 getInitialState 都與組件的初始化狀態(tài)有關(guān),但它們的使用方式和時機略有

    2024年01月19日
    瀏覽(39)
  • 面試 React 框架八股文十問十答第十一期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)React 與 Vue 的 diff 算法有何不同? React 和 Vue 在處理虛擬 DOM 的 diff 算法上有一些不同之處: React: 使用深度優(yōu)先搜索策略,通過同

    2024年01月18日
    瀏覽(22)
  • 面試 JavaScript 框架八股文十問十答第七期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)原型修改、重寫 在 JavaScript 中,可以通過修改或重寫對象的原型來改變對象的行為。原型修改指的是直接修改對象的原型,而原型

    2024年02月20日
    瀏覽(18)
  • 面試 Vue 框架八股文十問十答第七期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)Vue template 到 render 的過程 在Vue中,template會被編譯成一個 render 函數(shù)。整個過程包括以下步驟: 模板編譯: Vue通過模板編譯器將t

    2024年01月25日
    瀏覽(54)
  • 面試瀏覽器框架八股文十問十答第一期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)什么是 XSS 攻擊? 1)XSS(Cross-Site Scripting)攻擊是一種常見的網(wǎng)絡(luò)安全漏洞,攻擊者通過在網(wǎng)頁中插入惡意腳本來實現(xiàn)攻擊,當用戶

    2024年02月19日
    瀏覽(15)
  • 面試計算機網(wǎng)絡(luò)框架八股文十問十答第三期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)GET和POST請求的區(qū)別 主要區(qū)別如下: GET: 用于請求服務(wù)器上的資源。 參數(shù)通過 URL 的查詢字符串傳遞,可見于 URL 中。 通常用于獲

    2024年02月20日
    瀏覽(21)
  • 面試計算機網(wǎng)絡(luò)框架八股文十問十答第七期

    作者:程序員小白條,個人博客 相信看了本文后,對你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新! ?點贊?收藏?不迷路!? 1)UDP協(xié)議為什么不可靠? UDP(用戶數(shù)據(jù)報協(xié)議)是一種無連接的、不可靠的傳輸協(xié)議。它的不可靠性主要體現(xiàn)在以下幾個方面: 無連

    2024年02月19日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包