前言 在上一篇文章中,我們介紹了如何操作 components 與 router,這篇文章將教你如何在你的專案中加入 AdminLTE3 的 CSS 樣式,讓你的專案能夠擁有漂亮的 UI 設計。
 
AdminLTE 是一個基於 Bootstrap 框架的免費管理儀表板模板,可以快速建立具有相應外觀和功能的後台管理系統。AdminLTE 3 是其最新版本,提供了大量的 UI 元件、各種頁面佈局和功能,例如表格、圖表、表單、地圖、日曆等等,也可以輕鬆自訂主題樣式。
AdminLTE 3 AdminLTE 3 支援多種框架和平台,包括 Angular、React、Vue、ASP.NET Core、Laravel 等等,因此非常適合用於各種 Web 開發項目。此外,AdminLTE 3 的文件非常完整,提供了詳細的使用說明和示例,方便開發者快速入門和使用。
 
區分定義 起手前,請依據這個大區塊方式切割。後期時候可以再把裡面內容再次切割,後續工作就不會太複雜。
需要的動作 
創建 components/@Shared 資料夾 
安裝 admin-lte 3   npm i admin-lte 
 
備註 : 如果你想要抓取全部的 js 資料,可以參考下方 reactJs booleanhunter/ReactJS-AdminLTE : (https://github.com/booleanhunter/ReactJS-AdminLTE)[https://github.com/booleanhunter/ReactJS-AdminLTE] 
結構說明 
body : 請到 public / index.html 修改即可 
AppRouter : 加入 class => wrapper   
AppRouter : 加入 class => content-wrapper 
AppRouter : 加入 adminLTE css、js 檔案 從 adminLTE 作者設計的結構來看,建議先把外層先建立起來,完成我們的第一步。 
 
index.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <!DOCTYPE html > <html  lang ="en" >   <head >      <meta  charset ="utf-8"  />      <link  rel ="icon"  href ="%PUBLIC_URL%/favicon.ico"  />      <meta  name ="viewport"  content ="width=device-width, initial-scale=1"  />      <meta  name ="theme-color"  content ="#000000"  />      <meta         name ="description"        content ="Web site created using create-react-app"      />     <link  rel ="apple-touch-icon"  href ="%PUBLIC_URL%/logo192.png"  />           <link  rel ="manifest"  href ="%PUBLIC_URL%/manifest.json"  />           <title > AdminLTE 3</title >    </head >    <body  class ="hold-transition sidebar-mini layout-fixed" >      <noscript > You need to enable JavaScript to run this app.</noscript >      <div  id ="root" > </div >         </body >  </html > 
 
AppRouter.tsx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import  React  from  'react' ;import  { BrowserRouter , Routes , Route , Link  } from  'react-router-dom' ;import  'admin-lte/dist/css/adminlte.min.css' import  'admin-lte/plugins/fontawesome-free/css/all.css' import  'admin-lte/dist/js/adminlte' import  Header  from  '../component/@Shared/Header' ;import  MenuSidebar  from  '../component/@Shared/MenuSidebar' ;const  AppRouter  = ( ) => {    return  (         <BrowserRouter >              <div  className ="wrapper" >                  <div  className ='content-wrapper' >                      <Routes >                          <Route  path ="/"  element ={ <Home  /> } />                         <Route  path ="/about"  element ={ <About  /> } />                     </Routes >                  </div >              </div >          </BrowserRouter >      ); } export  default  AppRouter ;
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 import  { Link  } from  'react-router-dom' ;import  users from  'admin-lte/dist/img/user1-128x128.jpg' import  users_8 from  'admin-lte/dist/img/user8-128x128.jpg' import  users_3 from  'admin-lte/dist/img/user3-128x128.jpg' const  Header  = ( ) => {    return  (         <nav  className ="main-header navbar navbar-expand navbar-white navbar-light" >            <ul  className ="navbar-nav" >              <li  className ="nav-item" >                <a  className ="nav-link"  data-widget ="pushmenu"  href ="#"  role ="button" > <i  className ="fas fa-bars" > </i > </a >              </li >              <li  className ="nav-item d-none d-sm-inline-block" >                  <Link  to ="/"  className ="nav-link" > Home</Link >              </li >              <li  className ="nav-item d-none d-sm-inline-block" >                <Link  to ="/about"  className ="nav-link" > About</Link >              </li >            </ul >                   <ul  className ="navbar-nav ml-auto" >              <li  className ="nav-item" >                <a  className ="nav-link"  data-widget ="navbar-search"  href ="#"  role ="button" >                  <i  className ="fas fa-search" > </i >                </a >                <div  className ="navbar-search-block" >                  <form  className ="form-inline" >                    <div  className ="input-group input-group-sm" >                      <input  className ="form-control form-control-navbar"  type ="search"  placeholder ="Search"  aria-label ="Search"  />                      <div  className ="input-group-append" >                        <button  className ="btn btn-navbar"  type ="submit" >                          <i  className ="fas fa-search" > </i >                        </button >                        <button  className ="btn btn-navbar"  type ="button"  data-widget ="navbar-search" >                          <i  className ="fas fa-times" > </i >                        </button >                      </div >                    </div >                  </form >                </div >              </li >                     <li  className ="nav-item dropdown" >                <a  className ="nav-link"  data-toggle ="dropdown"  href ="#" >                  <i  className ="far fa-comments" > </i >                  <span  className ="badge badge-danger navbar-badge" > 3</span >                </a >                <div  className ="dropdown-menu dropdown-menu-lg dropdown-menu-right" >                  <a  href ="#"  className ="dropdown-item" >                    <div  className ="media" >                      <img  src ={users}  alt ="User Avatar"  className ="img-size-50 mr-3 img-circle"  />                      <div  className ="media-body" >                        <h3  className ="dropdown-item-title" >                          Brad Diesel                         <span  className ="float-right text-sm text-danger" > <i  className ="fas fa-star" > </i > </span >                        </h3 >                        <p  className ="text-sm" > Call me whenever you can...</p >                        <p  className ="text-sm text-muted" > <i  className ="far fa-clock mr-1" > </i >  4 Hours Ago</p >                      </div >                    </div >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item" >                    <div  className ="media" >                      <img  src ={users_8}  alt ="User Avatar"  className ="img-size-50 img-circle mr-3"  />                      <div  className ="media-body" >                        <h3  className ="dropdown-item-title" >                          John Pierce                         <span  className ="float-right text-sm text-muted" > <i  className ="fas fa-star" > </i > </span >                        </h3 >                        <p  className ="text-sm" > I got your message bro</p >                        <p  className ="text-sm text-muted" > <i  className ="far fa-clock mr-1" > </i >  4 Hours Ago</p >                      </div >                    </div >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item" >                    <div  className ="media" >                      <img  src ={users_3}alt ="User Avatar"  className ="img-size-50 img-circle mr-3"  />                      <div  className ="media-body" >                        <h3  className ="dropdown-item-title" >                          Nora Silvester                         <span  className ="float-right text-sm text-warning" > <i  className ="fas fa-star" > </i > </span >                        </h3 >                        <p  className ="text-sm" > The subject goes here</p >                        <p  className ="text-sm text-muted" > <i  className ="far fa-clock mr-1" > </i >  4 Hours Ago</p >                      </div >                    </div >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item dropdown-footer" > See All Messages</a >                </div >              </li >              <li  className ="nav-item dropdown" >                <a  className ="nav-link"  data-toggle ="dropdown"  href ="#" >                  <i  className ="far fa-bell" > </i >                  <span  className ="badge badge-warning navbar-badge" > 15</span >                </a >                <div  className ="dropdown-menu dropdown-menu-lg dropdown-menu-right" >                  <span  className ="dropdown-item dropdown-header" > 15 Notifications</span >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item" >                    <i  className ="fas fa-envelope mr-2" > </i >  4 new messages                   <span  className ="float-right text-muted text-sm" > 3 mins</span >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item" >                    <i  className ="fas fa-users mr-2" > </i >  8 friend requests                   <span  className ="float-right text-muted text-sm" > 12 hours</span >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item" >                    <i  className ="fas fa-file mr-2" > </i >  3 new reports                   <span  className ="float-right text-muted text-sm" > 2 days</span >                  </a >                  <div  className ="dropdown-divider" > </div >                  <a  href ="#"  className ="dropdown-item dropdown-footer" > See All Notifications</a >                </div >              </li >              <li  className ="nav-item" >                <a  className ="nav-link"  data-widget ="fullscreen"  href ="#"  role ="button" >                  <i  className ="fas fa-expand-arrows-alt" > </i >                </a >              </li >              <li  className ="nav-item" >                <a  className ="nav-link"  data-widget ="control-sidebar"  data-slide ="true"  href ="#"  role ="button" >                  <i  className ="fas fa-th-large" > </i >                </a >              </li >            </ul >          </nav >      ); } export  default  Header ;
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 import  logo from  'admin-lte/dist/img/AdminLTELogo.png' import  users from  'admin-lte/dist/img/user1-128x128.jpg' import  { Link  } from  'react-router-dom' ;const  MenuSidebar  = ( ) => {    return  (         <aside  className ="main-sidebar sidebar-dark-primary elevation-4" >              <Link  to ="/"  className ="brand-link" >                  <img  src ={logo}  alt ="AdminLTE Logo"  className ="brand-image img-circle elevation-3"  />                  <span  className ="brand-text font-weight-light" > AdminLTE 3</span >              </Link >              <div  className ="sidebar" >                  <div  className ="user-panel mt-3 pb-3 mb-3 d-flex" >                      <div  className ="image" >                          <img  src ={users}  className ="img-circle elevation-2"  alt ="User Image"  />                      </div >                      <div  className ="info" >                          <a  href ="#"  className ="d-block" > Alexander Pierce</a >                      </div >                  </div >                  <div  className ="form-inline" >                      <div  className ="input-group"  data-widget ="sidebar-search" >                          <input  className ="form-control form-control-sidebar"  type ="search"  placeholder ="Search"  aria-label ="Search"  />                          <div  className ="input-group-append" >                              <button  className ="btn btn-sidebar" >                                  <i  className ="fas fa-search fa-fw" > </i >                              </button >                          </div >                      </div >                  </div >                  <nav  className ="mt-2" >                      <ul  className ="nav nav-pills nav-sidebar flex-column"  data-widget ="treeview"  role ="menu"  data-accordion ="false" >                          <li  className ="nav-item" >                              <a  href ="#"  className ="nav-link" >                                  <i  className ="nav-icon fas fa-tachometer-alt" > </i >                                  <p >                                      Dashboard                                     <i  className ="right fas fa-angle-left" > </i >                                  </p >                              </a >                              <ul  className ="nav nav-treeview" >                                  <li  className ="nav-item" >                                      <a  href ="../../index.html"  className ="nav-link" >                                          <i  className ="far fa-circle nav-icon" > </i >                                          <p > Dashboard v1</p >                                      </a >                                  </li >                                  <li  className ="nav-item" >                                      <a  href ="../../index2.html"  className ="nav-link" >                                          <i  className ="far fa-circle nav-icon" > </i >                                          <p > Dashboard v2</p >                                      </a >                                  </li >                                  <li  className ="nav-item" >                                      <a  href ="../../index3.html"  className ="nav-link" >                                          <i  className ="far fa-circle nav-icon" > </i >                                          <p > Dashboard v3</p >                                      </a >                                  </li >                              </ul >                          </li >                      </ul >                  </nav >              </div >          </aside >      ); } export  default  MenuSidebar ;
 
完成後 完成後如同下圖畫面。 下篇會著重於如何看 adminLTE 結構以及規劃。