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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何編寫CleanerReact代碼

大家好,我是小弋。

創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計與策劃設(shè)計,昆山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:昆山等地區(qū)。昆山做網(wǎng)站價格咨詢:028-86922220

今天分享的內(nèi)容是如何編寫干凈的React代碼。

正文

作為React開發(fā)者,我們都希望寫出更干凈的代碼,更簡單,更容易閱讀。

在本指南中,我把一些編寫更干凈的React代碼的七個頂級方法放在一起,使得構(gòu)建React項目和審查你的代碼更容易。

總的來說,學(xué)習(xí)如何編寫更干凈的React代碼將使你成為一個更有價值的、整體上更快樂的React開發(fā)者,所以讓我們馬上開始吧!

主要涉及以下幾個點:

  • 合理使用jsx。
  • 把不相關(guān)的代碼移到一個獨立的組件中。
  • 為每個組件創(chuàng)建單獨的文件。
  • 將共享功能移入React hooks。
  • 盡可能多地從你的JSX中刪除JavaScript。
  • 格式化內(nèi)聯(lián)樣式,減少臃腫的代碼。
  • 合理使用React context。

合理使用JSX

你如何向一個給定的prop傳遞一個true的值?

在下面的例子中,我們使用showTitle在Navbar組件中顯示我們應(yīng)用程序的標(biāo)題。

 
 
 
  1. // src/App.js
  2. export default function App() {
  3.   return (
  4.     
  5.       
  6.     
  7.   );
  8. }
  9. function Navbar({ showTitle }) {
  10.   return (
  11.     
  12.       {showTitle && 

    My Special App

    }
  13.     
  •   )
  • }
  •  我們是否需要明確地將showTitle設(shè)置為布爾值true?我們不需要!

    一個快速的速記方法是,在一個組件上提供的任何prop的默認(rèn)值都是true。

    因此,如果我們在Navbar上添加showTitle,我們的標(biāo)題元素就會顯示出來。

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.   return (
    4.     
    5.       
    6.     
    7.   );
    8. }
    9. function Navbar({ showTitle }) {
    10.   return (
    11.     
    12.       {showTitle && 

      My Special App

      } // title shown!
    13.     
  •   )
  • }
  •  另一個要記住的有用的速記法涉及到傳遞字符串prop。

    當(dāng)你傳遞一個字符串的值時,你不需要用大括號把它包起來。

    如果我們要設(shè)置導(dǎo)航條的標(biāo)題,使用title的prop時,我們可以把它的值放在雙引號中。

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.   return (
    4.     
    5.       
    6.     
    7.   );
    8. }
    9. function Navbar({ title }) {
    10.   return (
    11.     
    12.       

      {title}

    13.     
  •   )
  • }
  •  把不相關(guān)的代碼移到一個獨立的組件中

    可以說,編寫更干凈的React代碼的最簡單和最重要的方法是善于將我們的代碼抽象成獨立的React組件。

    讓我們看一下下面的例子:

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.   const posts = [
    4.     {
    5.       id: 1,
    6.       title: "How to Build YouTube with React"
    7.     },
    8.     {
    9.       id: 2,
    10.       title: "How to Write Your First React Hook"
    11.     }
    12.   ];
    13.   return (
    14.     
    15.       
    16.       
      •         {posts.map(post => (
      •           
      •             {post.title}
      •           
      •         ))}
      •       
    17.     
    18.   );
    19. }
    20. function Navbar({ title }) {
    21.   return (
    22.     
    23.       

      {title}

    24.     
  •   );
  • }
  •  我們的應(yīng)用程序正在顯示一個導(dǎo)航條組件。我們正在用.map()遍歷一個帖子數(shù)組,并在頁面上顯示其標(biāo)題。

    我們思考一個問題,我們怎樣才能使它更干凈呢?

    我們?yōu)槭裁床话盐覀冋谘h(huán)的代碼,抽象化,并在一個單獨的組件中顯示它們,我們稱之為FeaturePosts。

    讓我們看看改進后的結(jié)果:

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.  return (
    4.     
    5.       
    6.       
    7.     
    8.   );
    9. }
    10. function Navbar({ title }) {
    11.   return (
    12.     
    13.       

      {title}

    14.     
  •   );
  • }
  • function FeaturedPosts() {
  •   const posts = [
  •     {
  •       id: 1,
  •       title: "How to Build YouTube with React"
  •     },
  •     {
  •       id: 2,
  •       title: "How to Write Your First React Hook"
  •     }
  •   ];
  •   return (
  •     
    •       {posts.map((post) => (
    •         {post.title}
    •       ))}
    •     
  •   );
  • }
  •  正如你所看到的,我們現(xiàn)在可以只看我們的App組件。

    通過閱讀其中的組件名稱,即Navbar和FeaturePosts,我們可以準(zhǔn)確地看到我們的應(yīng)用程序所顯示的內(nèi)容。

    為每個組件創(chuàng)建單獨的文件

    從我們之前的例子來看,我們把所有的組件都放在一個文件里,即app.js文件。

    類似于我們將代碼抽象成獨立的組件以使我們的應(yīng)用程序更具可讀性,為了使我們的應(yīng)用程序文件更具可讀性,我們可以將我們擁有的每個組件放在一個單獨的文件中。

    這又一次幫助我們在應(yīng)用程序中分離關(guān)注點。這意味著每個文件只負(fù)責(zé)一個組件,如果我們想在我們的應(yīng)用程序中重復(fù)使用一個組件,就不會混淆它的來源了。

     
     
     
    1. // src/App.js
    2. import Navbar from './components/Navbar.js';
    3. import FeaturedPosts from './components/FeaturedPosts.js';
    4. export default function App() {
    5.   return (
    6.     
    7.       
    8.       
    9.     
    10.   );
    11. }

     我們來看看Navbar中的代碼:

     
     
     
    1. // src/components/Navbar.js
    2. export default function Navbar({ title }) {
    3.   return (
    4.     
    5.       

      {title}

    6.     
  •   );
  • }
  •  接著我們看看FeaturedPosts中代碼:

     
     
     
    1. // src/components/FeaturedPosts.js
    2. export default function FeaturedPosts() {
    3.   const posts = [
    4.     {
    5.       id: 1,
    6.       title: "How to Build YouTube with React"
    7.     },
    8.     {
    9.       id: 2,
    10.       title: "How to Write Your First React Hook"
    11.     }
    12.   ];
    13.   return (
    14.     
      •       {posts.map((post) => (
      •         {post.title}
      •       ))}
      •     
    15.   );
    16. }

     此外,通過將每個單獨的組件包含在自己的文件中,我們可以避免一個文件變得過于臃腫。如果我們想把所有的組件都加入到app.js文件中,我們很容易看到我們的app.js文件變得非常大。

    將共享功能移入React hooks

    看看我們的FeaturePosts組件,假設(shè)我們不是顯示靜態(tài)的帖子數(shù)據(jù),而是想從一個API中獲取我們的帖子數(shù)據(jù)。

    我們可以用fetch API來做。你可以看到下面這個結(jié)果:

     
     
     
    1. // src/components/FeaturedPosts.js
    2. import React from 'react';
    3. export default function FeaturedPosts() {
    4.   const [posts, setPosts] = React.useState([]);     
    5.     
    6.   React.useEffect(() => {
    7.     fetch('https://jsonplaceholder.typicode.com/posts')
    8.       .then(res => res.json())
    9.       .then(data => setPosts(data));
    10.   }, []);
    11.   return (
    12.     
      •       {posts.map((post) => (
      •         {post.title}
      •       ))}
      •     
    13.   );
    14. }

     然而,如果我們想在多個組件中執(zhí)行這一數(shù)據(jù)請求,該怎么辦?

    比方說,除了FeaturePosts組件外,我們還想創(chuàng)建一個具有相同數(shù)據(jù)的Post組件。我們將不得不復(fù)制我們用來獲取數(shù)據(jù)的邏輯,并將其粘貼到該組件中。

    為了避免這樣做,我們?yōu)槭裁床皇褂靡粋€新的React鉤子,我們可以稱之為useFetchPosts:

     
     
     
    1. // src/hooks/useFetchPosts.js
    2. import React from 'react';
    3. export default function useFetchPosts() {
    4.   const [posts, setPosts] = React.useState([]);     
    5.     
    6.   React.useEffect(() => {
    7.     fetch('https://jsonplaceholder.typicode.com/posts')
    8.       .then(res => res.json())
    9.       .then(data => setPosts(data));
    10.   }, []);
    11.   return posts;
    12. }

    一旦我們在一個專門的 "鉤子 "文件夾中創(chuàng)建了這個鉤子,我們就可以在任何我們喜歡的組件中重復(fù)使用它,包括我們的FeaturePosts組件:

     
     
     
    1. // src/components/FeaturedPosts.js
    2. import useFetchPosts from '../hooks/useFetchPosts.js';
    3. export default function FeaturedPosts() {
    4.   const posts = useFetchPosts()
    5.   return (
    6.     
      •       {posts.map((post) => (
      •         {post.title}
      •       ))}
      •     
    7.   );
    8. }

     盡可能多地從你的JSX中刪除JavaScript

    另一個非常有用的,但經(jīng)常被忽視的清理組件的方法是盡可能多地從我們的JSX中刪除JavaScript。

    讓我們看一下下面的例子:

     
     
     
    1. // src/components/FeaturedPosts.js
    2. import useFetchPosts from '../hooks/useFetchPosts.js';
    3. export default function FeaturedPosts() {
    4.   const posts = useFetchPosts()
    5.   return (
    6.     
      •       {posts.map((post) => (
      •          {
      •           console.log(event.target, 'clicked!');
      •         }} key={post.id}>{post.title}
      •       ))}
      •     
    7.   );
    8. }

     我們正試圖處理一個帖子的點擊事件。你可以看到,我們的JSX變得更加難以閱讀。鑒于我們的函數(shù)是作為一個內(nèi)聯(lián)函數(shù)包含的,它掩蓋了這個組件的目的,以及它的相關(guān)函數(shù)。

    我們能做什么來解決這個問題呢?我們可以把與onClick相連的內(nèi)聯(lián)函數(shù)提取出來,變成一個單獨的處理程序,我們可以給它一個合適的名字,如handlePostClick。

    一旦我們這樣做,我們的JSX就會再次變得可讀。

     
     
     
    1. // src/components/FeaturedPosts.js
    2. import useFetchPosts from '../hooks/useFetchPosts.js';
    3. export default function FeaturedPosts() {
    4.   const posts = useFetchPosts()
    5.   
    6.   function handlePostClick(event) {
    7.     console.log(event.target, 'clicked!');   
    8.   }
    9.   return (
    10.     
      •       {posts.map((post) => (
      •         {post.title}
      •       ))}
      •     
    11.   );
    12. }

     格式化內(nèi)聯(lián)樣式,減少臃腫的代碼

    React開發(fā)者經(jīng)常會在他們的JSX中寫內(nèi)聯(lián)樣式。

    但是,這使我們的代碼更難閱讀,更難寫出額外的JSX。

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.   return (
    4.     
    5.       
    6.     
    7.   );
    8. }
    9. function Navbar({ title }) {
    10.   return (
    11.     
    12.       {title}
    13.     
  •   )
  • }
  •  我們想把這種關(guān)注點分離的概念應(yīng)用到我們的JSX樣式中,把我們的內(nèi)聯(lián)樣式移到一個CSS樣式表中,我們可以把它導(dǎo)入我們喜歡的任何組件。

    另一種重寫內(nèi)聯(lián)樣式的方法是將它們組織成對象。你可以看到這種模式是什么樣子的:

     
     
     
    1. // src/App.js
    2. export default function App() {
    3.   const styles = {
    4.     main: { textAlign: "center" }
    5.   };
    6.   return (
    7.     
    8.       
    9.     
    10.   );
    11. }
    12. function Navbar({ title }) {
    13.   const styles = {
    14.     div: { marginTop: "20px" },
    15.     h1: { fontWeight: "bold" }
    16.   };
    17.   return (
    18.     
    19.       {title}
    20.     
  •   );
  • }
  •  合理使用React context

    在你的React項目中,另一個必不可少的模式是使用React Context(特別是如果你有共同的屬性,你想在你的組件中重復(fù)使用,而你發(fā)現(xiàn)自己寫了很多重復(fù)的props)。

    例如,如果我們想在多個組件之間共享用戶數(shù)據(jù),而不是多個重復(fù)的props(一種叫做props drilling的模式),我們可以使用React庫中的context功能。

    在我們的例子中,如果我們想在我們的Navbar和FeaturePosts組件中重復(fù)使用用戶數(shù)據(jù),我們所需要做的就是把我們的整個應(yīng)用包裹在一個提供者組件中。

    接下來,我們可以在值prop上傳遞用戶數(shù)據(jù),并在useContext鉤子的幫助下,在我們的各個組件中消費該上下文。

     
     
     
    1. // src/App.js
    2. import React from "react";
    3. const UserContext = React.createContext();
    4. export default function App() {
    5.   const user = { name: "Reed" };
    6.   return (
    7.     
    8.       
    9.         
    10.         
    11.       
    12.     
    13.   );
    14. }
    15. // src/components/Navbar.js
    16. function Navbar({ title }) {
    17.   const user = React.useContext(UserContext);
    18.   return (
    19.     
    20.       

      {title}

    21.       {user && Logout}
    22.     
  •   );
  • }
  • // src/components/FeaturedPosts.js
  • function FeaturedPosts() {
  •   const posts = useFetchPosts();
  •   const user = React.useContext(UserContext);
  •   if (user) return null;
  •   return (
  •     
    •       {posts.map((post) => (
    •         {post.title}
    •       ))}
    •     
  •   );
  • }
  •  總結(jié)

    我希望當(dāng)你試圖改進你自己的React代碼,使其更干凈,更容易閱讀,并最終更愉快地創(chuàng)建你的React項目時,你會發(fā)現(xiàn)這個指南很有用。


    文章標(biāo)題:如何編寫CleanerReact代碼
    文章出自:http://m.5511xx.com/article/dhgecee.html