国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - React開發人員面臨的三大編碼挑戰

React開發人員面臨的三大編碼挑戰

2021-12-03 22:48hackernoon.comMichael Pautov 編程技術

如今,React 是最流行的 Web 框架之一。越來越多的公司已經在使用 React,或者正在轉向 React。

【51CTO.com快譯】React 庫很大并且有很多概念,每個 React項目都需要專家級別的開發人員。React專家不僅要熟悉React相關概念,還應該知道如何在實時項目中使用它們。

React開發人員面臨的三大編碼挑戰

但是招聘到專家級別的React開發人員并不容易。因為只有經驗豐富的開發人員才能解決開發中的編碼挑戰,例如高級的概念。在本文,將為你列出 React 專家面臨的三大編碼挑戰。

創建高階組件以重用組件邏輯

高階組件是開發人員用于重用組件邏輯的高級技術。重用代碼是 React 專家應該具備的一項重要技能。具有可重用性的主要原因是代碼優化。

在此編碼挑戰中,你可能會被要求創建三個具有相似組件邏輯的不同組件。因此,你必須創建一個具有組件邏輯的高階組件,并且它將被其他三個組件重用。

對于這個挑戰,你有三個組件,每個組件都包含一個按鈕,該按鈕將狀態中的值增加一個特定的數字。假設,三個組件是:

  • “ComponentA”,其中按鈕將值增加 2。
  • “ComponentB”,其中按鈕將值增加 20。
  • “ComponentC”,其中按鈕將值增加 200。

首先,用邏輯創建一個 HOC。

  1. import { useState } from "react"; 
  2.  
  3. const HigherOrderComponent = (Component, incrementValue) => { 
  4. const HOCFun = () => { 
  5. const [value, setValue] = useState(0); 
  6. const incrementHandler = () => { 
  7. setValue(value + incrementValue); 
  8. }; 
  9.  
  10. return <Component value={value} incrementHandler={incrementHandler} />
  11. }; 
  12.  
  13. return HOCFun; 
  14. }; 
  15.  
  16. export default HigherOrderComponent; 

“HigherOrderComponent”有兩個參數——一個組件和狀態將增加的數字。然后,創建一個具有組件邏輯的函數。該邏輯包含一個狀態變量,其值由處理程序使用傳入數字遞增。

這個函數使用 props - value 和 incrementHandler 返回傳入的組件。請記住,這是使用 HOC 制作的新組件。最后,這個函數會被返回,因為它將在現有組件中使用。

現在,讓我們在“ComponentA”、“ComponentB”和“ComponentC”中使用 HOC。

組件A:

  1. import HigherOrderComponent from "./HigherOrderComponent"; 
  2.  
  3. const ComponentA = ({ value, incrementHandler }) => { 
  4. return ( 
  5. <div> 
  6. <button onClick={incrementHandler}>Increment by 2</button> 
  7. <h2>{value}</h2> 
  8.  
  9. </div> 
  10. ); 
  11. }; 
  12.  
  13. export default HigherOrderComponent(ComponentA, 2); 

組件B:

  1. import HigherOrderComponent from "./HigherOrderComponent"; 
  2.  
  3. const ComponentB = ({ value, incrementHandler }) => { 
  4. return ( 
  5. <div> 
  6. <button onClick={incrementHandler}>Increment by 29</button> 
  7. <h2>{value}</h2> 
  8. </div> 
  9. ); 
  10. }; 
  11.  
  12. export default HigherOrderComponent(ComponentB, 20); 

組件C:

  1. import HigherOrderComponent from "./HigherOrderComponent"; 
  2.  
  3. const ComponentC = ({ value, incrementHandler }) => { 
  4. return ( 
  5. <div> 
  6. <button onClick={incrementHandler}>Increment by 200</button> 
  7. <h2>{value}</h2> 
  8. </div> 
  9. ); 
  10. }; 
  11.  
  12. export default HigherOrderComponent(ComponentC, 200); 

這些組件都不包含任何邏輯,但一切正常。

發生這種情況是因為使用高階組件來實現代碼可重用性。

現在,請記住,此編碼挑戰的動機是檢查你如何創建高階組件并重用邏輯。

實現和使用 Redux

隨著應用程序的增長,管理全局狀態變得困難。Redux 是最流行的第三方庫,用于通過 React 進行狀態管理。專業的 React 開發人員應該了解 Redux 是什么以及它是如何工作的。所以面試可以要求你在一個基本的 React 應用程序中實現 Redux。

在這個編碼挑戰中,面試官想檢查你是如何實現和使用 Redux 的。因此,你可能會獲得一個包含兩個組件的基本 React 應用程序——一個包含用于增加和減少全局狀態的按鈕,另一個包含用于顯示值的按鈕。

首先,創建減速器。

  1. export const reducer = (state = { value: 0 }, action) => { 
  2. switch (action.type) { 
  3. case "INCREMENT_VALUE": 
  4. return { 
  5. ...state, 
  6. value: action.payload + 1, 
  7. }; 
  8. case "DECREMENT_VALUE": 
  9. return { 
  10. ...state, 
  11. value: action.payload - 1, 
  12. }; 
  13. default: 
  14. return { ...state }; 
  15. }; 

除了類型之外,reducer 還會從動作中接收有效載荷。

然后,創建動作創建者。你也可以創建普通動作,但創建動作創建者表明你使用過復雜的 Redux。

  1. export const incrementValueAction = (value) => { 
  2. return { 
  3. type: "INCREMENT_VALUE", 
  4. payload: value, 
  5. }; 
  6. }; 
  7.  
  8. export const decrementValueAction = (value) => { 
  9. return { 
  10. type: "DECREMENT_VALUE", 
  11. payload: value, 
  12. }; 
  13. }; 

接下來,創建商店。

  1. import { createStore } from "redux"; 
  2. import { reducer } from "./Reducers/reducers"; 
  3.  
  4. const initialState = { 
  5. value: 0, 
  6. }; 
  7.  
  8. const store = createStore(reducer, initialState); 
  9.  
  10. export default store; 

最后,使用 Provider 為商店包裝應用程序。

  1. import { Provider } from "react-redux"; 
  2. import store from "./store"; 
  3. import Component1 from "./Components/Component1"; 
  4. import Component2 from "./Components/Component2"; 
  5.  
  6. function App() { 
  7. return ( 
  8. <Provider store={store}> 
  9. <div className="App"> 
  10. <Component1 /> 
  11. <hr /> 
  12. <Component2 /> 
  13. </div> 
  14. </Provider> 
  15. ); 
  16.  
  17. export default App; 

上半場準備好了。Redux 已實現,但作業尚未完成,因為在 React 組件中使用它仍然未決。為此,我們將使用 react-redux 鉤子。請記住,不要使用舊的 connect() 函數。

首先,安裝“react-redux”,然后使用組件中的 useDispatch 和 useSelector react-redux 鉤子。

組件 1:

  1. import { useDispatch, useSelector } from "react-redux"; 
  2. import { 
  3. decrementValueAction, 
  4. incrementValueAction, 
  5. } from "../ActionCreators/actionCreators"; 
  6.  
  7. const Component1 = () => { 
  8. const dispatch = useDispatch(); 
  9. const value = useSelector((state) => state.value); 
  10.  
  11. console.log(value); 
  12.  
  13. const incrementHandler = () => { 
  14. dispatch(incrementValueAction(value)); 
  15. }; 
  16.  
  17. const decrementHandler = () => { 
  18. dispatch(decrementValueAction(value)); 
  19. }; 
  20.  
  21. return ( 
  22. <div> 
  23. <button onClick={incrementHandler}>Increment</button> 
  24. <button onClick={decrementHandler}>Decrement</button> 
  25. </div> 
  26. ); 
  27. }; 
  28.  
  29. export default Component1; 

組件2:

  1. import { useSelector } from "react-redux"; 
  2.  
  3. const Component2 = () => { 
  4. const value = useSelector((state) => state.value); 
  5.  
  6. return ( 
  7. <div> 
  8. <h2>{value}</h2> 
  9. <hr /> 
  10. </div> 
  11. ); 
  12. }; 
  13.  
  14. export default Component2; 

使用 react-redux hooks,按鈕將起作用。

現在,主要動機是檢查你的 redux 知識。面試可能會要求你在其中使用 redux-thunk,從而使這個挑戰變得更加困難。此外,使用 react-redux 鉤子可以給人更好的印象并避免使用舊技術。

在不使用 props 的情況下在組件之間共享數據

在這個編碼挑戰中,面試可能會給你一個帶有多個嵌套組件的 React 應用程序,如下所示。

React開發人員面臨的三大編碼挑戰

組件“B”是“A”的子組件,而組件“C”和“D”是“B”的子組件。

假設組件“A”中有一個對象,并且在“C”和“D”中需要它。有兩種方法可以在不使用 props 的情況下在這些嵌套組件中共享此對象。第一種是使用 Redux。但是在面試官想要避免使用 props 的情況下,永遠不要使用 Redux,因為 Redux 是為復雜的項目設計的。實際上,面試官期待這個編碼挑戰的“前提場景”。

對于這個挑戰,首先,創建一個場景應用。

  1. import React from "react"; 
  2.  
  3. const DemoContext = React.createContext(); 
  4.  
  5. export default DemoContext; 

然后,使用此場景,將組件樹包裝在 Provider 中。

  1. import DemoContext from "../DemoContext"; 
  2. import B from "./B"; 
  3.  
  4. const A = () => { 
  5. const obj = { 
  6. a: 1, 
  7. b: 2, 
  8. c: 3, 
  9. }; 
  10. return ( 
  11. <DemoContext.Provider value={{ obj }}> 
  12. <div> 
  13. <B /> 
  14. </div> 
  15. </DemoContext.Provider> 
  16. ); 
  17. }; 
  18.  
  19. export default A; 

現在,我們可以訪問組件“C”和“D”中的“obj”。有兩種使用場景的方法 - 使用 Consumer 和 useContext hook。更喜歡使用 useContext hook,因為它是現代更好的方法。

C:

  1. import React, { useContext } from "react"; 
  2. import DemoContext from "../DemoContext"; 
  3.  
  4. const C = () => { 
  5. const { obj } = useContext(DemoContext); 
  6. const { a, b, c } = obj; 
  7.  
  8. return ( 
  9. <div> 
  10. <h2>Component C</h2> 
  11. <h3>{a}</h3> 
  12. <h3>{b}</h3> 
  13. <h3>{c}</h3> 
  14. </div> 
  15. ); 
  16. }; 
  17.  
  18. export default C; 

D:

  1. import React, { useContext } from "react"; 
  2. import DemoContext from "../DemoContext"; 
  3.  
  4. const D = () => { 
  5. const { obj } = useContext(DemoContext); 
  6. const { a, b, c } = obj; 
  7.  
  8. return ( 
  9. <div> 
  10. <h2>Component D</h2> 
  11. <h3>{a}</h3> 
  12. <h3>{b}</h3> 
  13. <h3>{c}</h3> 
  14. </div> 
  15. ); 
  16. }; 
  17.  
  18. export default D; 

讓我們檢查輸出。

它不使用道具就可以工作!

對于專業的React開發人員來說,編碼挑戰可能會很困難。面試官想要檢查你對React的了解以及你的工作經驗。因此,挑戰將有一些高級概念,如HOC、Redux和場景應用。

原文地址:https://developer.51cto.com/art/202111/693075.htm#topx

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜精品在线观看 | 亚洲宗合网 | 久久久www免费人成精品 | 亚洲综合中文 | 91视频在线播放视频 | 美日韩av| 亚洲一区二区三区免费视频 | 国产精品成人3p一区二区三区 | 成人精品二区 | 理论电影在线 | 欧美大片高清在线观看平台 | 午夜电影网站 | 蜜桃精品一区二区 | www.青青草| 久久久亚洲综合 | 免费看一区二区三区 | 国产综合区 | а天堂中文最新一区二区三区 | 国产精品亚洲一区二区三区 | 日韩中文在线观看 | 久久国产精品影视 | 高清一区二区在线观看 | 一区影院 | 自拍偷拍第一页 | 国产精品久久久久久久久久免费看 | 国产1级片| 国产精品毛片久久久久久 | 国产成人精品综合 | av三级| 黄色毛片a | 一级免费av | 免费黄色在线观看 | 亚洲成人播放 | 美女午夜影院 | 久久美女| 国产成人一区二区三区在线观看 | 中文字幕在线观看日韩 | 成人免费福利 | 日韩成人一区 | 国产精品久久久久久久久久久久久 | 亚洲欧美在线播放 |