React.js 상용구(SPA)

저장소 확인: https://github.com/dennisfrijlink/react-spa-boilerplate

🧐 내용물


  • Quick start

  • What is a SPA

  • Folder Structure
  • Assets
  • Components
  • Hooks
  • Layouts
  • Pages

  • App Structure
  • Mobile first

  • ✨ 빠른 시작



  • 이 저장소를 복제하십시오.

    git clone https://github.com/dennisfrijlink/react-spa-boilerplate.git
    


  • 개발을 시작하십시오.

    새 사이트의 디렉토리로 이동하여 시작하십시오.

    cd react-spa-boilerplate/
    npm install
    npm start
    


  • 달리기!

    귀하의 사이트는 현재 http://localhost:3000에서 실행 중입니다!

  • 배포를 위해 생성
    dist 폴더에 위치할 정적 프로젝트를 생성합니다.

    $ npm run build
    


  • ⚙️ 단일 페이지 애플리케이션이란?



    단일 페이지 애플리케이션(SPA)은 브라우저가 전체 새 페이지를 로드하는 기본 방법 대신 웹 서버의 새 데이터로 현재 웹 페이지를 동적으로 재작성하여 사용자와 상호 작용하는 웹 애플리케이션 또는 웹 사이트입니다.

    SPA에서 필요한 모든 HTML, JavaScript 및 CSS 코드는 단일 페이지 로드로 브라우저에서 검색하거나 일반적으로 사용자 작업에 대한 응답으로 필요에 따라 적절한 리소스가 동적으로 로드되고 페이지에 추가됩니다. 위치 해시 또는 HTML5 기록 API를 사용하여 응용 프로그램에서 별도의 논리적 페이지에 대한 인식 및 탐색 가능성을 제공할 수 있지만 페이지는 프로세스의 어느 시점에서도 다시 로드되지 않으며 제어권을 다른 페이지로 이전하지도 않습니다.



    폴더 구조



    자산


    assets 폴더에는 3개의 하위 폴더가 있습니다. 먼저 기본 css/scss 파일용입니다. 혼합, 중단점 또는 정의된 글꼴을 생각하십시오. 둘째, 폴더images와 이 폴더가 말해주는 것 같습니다. 그리고 마지막으로 로컬 글꼴 파일용 폴더fonts입니다.

    -| assets/
    ----| images/
    ----| scss/
    ------| DMSans-Regular.ttf
    ------| DMSans-Bold.ttf
    ----| fonts/
    ------| DMSans-Regular.ttf
    ------| DMSans-Bold.ttf
    


    구성 요소



    구성요소 디렉토리에는 React.js 구성요소가 포함되어 있습니다. 구성 요소는 페이지의 여러 부분을 구성하는 요소이며 재사용할 수 있고 페이지, 레이아웃 및 기타 구성 요소로 가져올 수 있습니다.

    -| components/
    ----| card/
    ------| index.js
    ------| card.js
    ------| card.scss
    


    후크



    hooks 디렉토리에는 모든 사용자 지정 Hook이 포함되어 있습니다. 사용자 지정 후크는 상태 저장 논리를 재사용하는 메커니즘입니다.

    레이아웃



    레이아웃은 React Router(check structure) 주변의 래퍼입니다. 레이아웃 내부에는 페이지에 대한 링크가 있는 라우터가 표시됩니다.

    -| layouts/
    ----| app.js
    


    app.js의 예:

    import  React, { Fragment } from  'react';
    import { Link } from  'react-router-dom';
    
    const  App  = ({ children }) => {
      return (
        <Fragment>
          <div  className="navigation">
            <Link  to="/">home</Link>
            <Link  to="/about">about</Link>
          </div>
          <Fragment>
           {children}
          </Fragment>
        </Fragment>
      );
    };
    
    export  default  App;
    


    페이지


    pages 디렉토리에는 애플리케이션 경로가 포함되어 있습니다. 페이지 디렉토리에 React 구성 요소를 생성하여 경로를 사용할 수 있는 root.js로 가져와야 합니다.

    const Home = lazy(() =>  import("./pages/Home"));
    const About = lazy(() =>  import("./pages/About"));
    
    const  Root  = (props) => {
      return (
        <Router>
          <App>
            <Suspense  fallback={<div></div>}>
              <Switch>
                <Route  exact  path="/"  component={Home}  />
                <Route  path="/about"  component={About}  />
              </Switch>
            </Suspense>
          </App>
        </Router>
       );
    };
    


    앱 구조





    📱 중단점 모바일 우선


    ./assets/scss/에 있는 scss 폴더에는 웹 개발자가 반응형 웹 사이트에 대한 CSS의 프로토타입, 구축, 확장 및 유지 관리를 보다 쉽게 ​​수행할 수 있도록 하는 두 개의 파일이 포함되어 있습니다.

    SCSS 파일




    assets
    │
    └─── scss
        │
        └─── _mixins.scss
        │
        └─── breakpoints.scss
    


    반응형 웹사이트를 구축하는 것은 오늘날 프런트 엔드 개발자에게 꼭 필요한 기술이므로 중단점을 모바일 우선으로 만들었습니다. 그것들은 모두 @media (min-width:로 정의되어 있으므로 작성하는 기본 CSS는 모바일 화면을 기반으로 합니다.

    // breakpoints.scss
    
    
    /* Small (sm) */
    $screen-sm-min: 640px;
    
    /* Medium (md) */
    $screen-md-min: 768px;
    
    /* Large (lg) */
    $screen-lg-min: 1024px;
    
    /* Extra Large (xl) */
    $screen-xl-min: 1280px;
    
    /* Fluid */
    $screen-fluid-min: 1536px;
    

    `

    이제 가장 중요한 요소인 믹스인을 만들 차례입니다.
    `

    // _mixins.scss
    
    
    // Small devices
    @mixin  sm {
      @media (min-width: #{$screen-sm-min}) {
        @content;
      } 
    }
    
    // Medium devices
    @mixin  md {
      @media (min-width: #{$screen-md-min}) {
        @content;
      } 
    }
    
    // Large devices
    @mixin  lg {
      @media (min-width: #{$screen-lg-min}) {
        @content;
      } 
    }
    
    // Extra large devices
    @mixin  xl {
      @media (min-width: #{$screen-xl-min}) {
        @content;
      } 
    }
    
    // Extra large devices
    @mixin  fluid {
      @media (min-width: #{$screen-fluid-min}) {
        @content;
      } 
    }
    

    `

    저는 항상 모바일 우선 접근 방식으로 웹사이트를 구축하므로 가장 작은 화면 크기(xs – 초소형)를 정의할 필요가 없으며 먼저 가장 작은 장치에 대해 SCSS 코드를 작성하고 가장 큰 장치에 대해 다음으로 SCSS 코드를 작성합니다. 때로는 엄격하게 정의된 중단점을 넘어서는 일부 스타일을 정의해야 할 수도 있습니다. mixin을 하나 더 추가해 보겠습니다. 저는 "rwd"라고 했습니다.
    `

    // _mixins.scss
    
    
    // Custom devices
    @mixin rwd($screen) {
      @media (min-width: $screen+'px') {
        @content;
      }
    }
    

    As a parameter
    $screen` 모든 화면 크기를 입력할 수 있습니다.

    예를 들어



    `

    .container {
        padding: 0 15px;
    
        /* 576px window width and more */
        @include sm {
            padding: 0 20px;
        }
    
        /* 992px window width and more */
        @include lg {
            margin-left: auto;
            margin-right: auto;
            max-width: 1100px;
        }
    
        /* 1400px window width and more */
        @include rwd(1400) {
            margin-bottom: 20px;
            margin-top: 20px;
        }
    }
    

    `

    좋은 웹페이지 즐겨찾기