React簡書開發實戰課程筆記——4
一、styled-components 擴充套件
在React
中, 一個檔案中引入css樣式表後,其他所有js檔案
中都可以使用這個樣式表,也就是說css樣式表是全域性的,這樣可能會造成樣式衝突,所以藉助第三方模組:styled-components
,可以讓css樣式表只對指定的元件起作用。
- 安裝:
npm install styled-components --save
- 使用:
這個擴充套件不是把樣式寫在css檔案中,而是寫在js檔案中(有點奇葩啊)。
新建一個js檔案
用於寫樣式(後面就叫這個js檔案為樣式檔案)。
-
由於有的css樣式還是需要公用的,比如
reset.css樣式表
,所以下面先介紹下怎麼公用樣式:import { injectGlobal } from 'styled-components'; //injectGlobal 是styled-components的一個API //將css程式碼寫在injectGlobal後面的反引號裡,就可以公用這些css程式碼 injectGlobal` body { margin: 0; padding: 10px; font-family: sans-serif; } `
-
其他需要對單個元件生效的css程式碼需要這樣寫:
樣式檔案:
const HeaderWrapper = styled.div` color: red; `; const Logo = styled.a` width: 100px; `;
其實就是將html標籤和css樣式定義為一個元件,然後再使用這個元件。最終還是會被瀏覽器解析成真正的html標籤
元件檔案:
render () { return ( <HeaderWrapper> <Logo></Logo> </HeaderWrapper> ) }
-
在這個裡面你可以使用
scss
的語法,比如:const Logo = styled.input` border: 1px solid #000; &.focused { border: 1px solid blue; } &:placeholder { color: #999; } `;
-
如果要使用
屬性
,比如:a標籤的href屬性
,有兩種寫法:
-
const Logo = styled.a` color: #000; `; render () { return ( <Logo href="#"></Logo> //和正常的html標籤用法一樣 ) }
-
const Logo = styled.a.attrs({ //將屬性寫成物件的形式 href: '#', })` color: #000; `;
-
如果要用css新增圖片,比如:
background: url('./logo.png');
,這種傳統的寫法就不行了。需要另一種寫法:import logoImg from './logo.png'; //需要先將圖片檔案引入 const Logo = styled.a` width: 100px; background: url(${logoImg}); `;
二、拆分reducer.js
如果只有一個reducer
的話,隨著業務邏輯的增加,程式碼會變的愈來愈多,reducer
會變得越來越大,所以最好將其拆分成不同的塊,每個塊對應一個reducer.js
檔案。
比如: 網頁頭部的state
拆分到headerReducer.js
中。
下面是如何將所有的reducer檔案連線起來:
import { combineReducers } from 'redux'; //combineReducers是redux中的一個API,用於連線多個reducer
import headerReducer from './headerReducer.js'; //引入拆分出去的reducer
import footerReducer from './footerReducer.js';
const reducer = combineReducers({
header: headerReducer,
footer: footerReducer
});
export default reducer;
拆分之後再使用state
中的資料就不能直接:this.state
了,需要這樣寫:this.state.header.xxx
,即需要指明: 是state下哪個塊的資料。
三、immutable
用於將物件設定為不可更改。
可用於保護state
,state是不允許修改的,為了防止誤修改,可以藉助immutable庫
-
安裝:
npm install immutable
-
使用:
在用到state的檔案里加上這句話:
import { fromJS } from 'immutable';
然後:
const defaultStore = fromJS({ //immutable中的fromJS方法將state資料保護起來 value: '' });
之後如果要
使用
或者更改
(注意:這裡說的更改並不是真正的修改)state
就要使用immutable
提供的set
和get
方法:this.state.set('value', 'hello'); console.log(this.state.get('value');); //如果要同時更改多個state,有兩種方法: //1、 this.state.set().set().set()... //2、 this.state.merge({ value: 'hello', list: ["hello", "world"] });
這裡說明一下為什麼用immutable設定state為不可修改之後還能更改state。
set
的原理是這樣的: 根據以前的state
和傳入的資料
,返回一個新的state
。這樣修改state
的目的實現了,但實際state
並沒有修改。所以,使用immutable
不僅保護了state
,而且又可以愉快的修改了~
四、redux-immutable
-
安裝:
npm install redux-immutable
-
使用:
將 import { combineReducers } from 'redux'; 改為: import { combineReducers } from 'redux-immutable';
//如果要get有子目錄的state,比如:state.header.value //state下的header下的value //使用redux-immutable之後,就不能再向immutable那樣使用了(this.state.header.get('value')) //必須給header也要加上get方法: this.state.get('header').get('value'); //可以簡寫成: this.state.getIn(['header', 'value']); //注意書寫順序
五、react-router
作用就是根據不同的url,顯示不同的頁面資訊
- 安裝:
npm install react-router-dom
- 使用:
import { BrowserRouter, Route } from 'react-router-dom';
<BrowserRouter>
<div> //BrowserRouter中只能有一個元素,所以包裹一個div
<Route path='/' exact component={Home}></Route>
<Route path='/detail' exact component={Detail}></Route>
</div>
</BrowserRouter>
說一下其中的exact
,作用是讓路徑完全匹配,否則,當訪問/detail
目錄時,同時也會訪問到根目錄/
有錯誤或不足,歡迎評論指正~
待續…
相關文章
- 《python運維和開發實戰-高階篇》視訊課程筆記Python運維筆記
- 《python運維和開發實戰-高階篇》視訊課程筆記二Python運維筆記
- React開發簡書總結React
- 谷歌機器學習課程筆記(4)——降低損失谷歌機器學習筆記
- DDD實戰課(實戰篇)--學習筆記筆記
- DApp設計與開發 課程筆記(一)APP筆記
- [Triton課程筆記] 1.2.4 程式設計實戰-配置ensemble model筆記程式設計
- 【筆記】阿里雲大學Java物件導向開發課程筆記01-77課時筆記阿里Java物件
- 機器學習課程筆記機器學習筆記
- [Triton課程筆記] 1.2.5 程式設計實戰-請求Triton Server筆記程式設計Server
- 《Maven實戰》之讀書筆記Maven筆記
- 課堂筆記4筆記
- React高階實戰 - 我的筆記React筆記
- 張紹文android開發高手課讀書筆記1Android筆記
- React Native 開發筆記React Native筆記
- [Triton課程筆記] 1.2.1 程式設計實戰-準備模型倉庫筆記程式設計模型
- React Nactive混合APP開發-CSDN公開課-專題視訊課程ReactAPP
- python課程筆記Python筆記
- dubbo學習筆記---dubbo開發實戰筆記
- 最新受歡迎前端框架之React專案實戰課程前端框架React
- 敏捷開發讀書筆記——隨筆敏捷筆記
- 《Bootstrap 4 Web設計與開發實戰》簡介bootWeb
- React 開發實戰(一)- Repeat 元件React元件
- 《網路爬蟲開發實戰案例》筆記爬蟲筆記
- JMeter實戰-全棧效能測試第3、4章讀書筆記JMeter全棧筆記
- Java併發程式設計實戰--讀書筆記(目錄)Java程式設計筆記
- react小書學習筆記React筆記
- 會計學課程筆記筆記
- 王道C短期課程筆記筆記
- 物聯網課程筆記筆記
- lua課程學習筆記筆記
- spring boot實戰讀書筆記(1)Spring Boot筆記
- 我的《機器學習實戰》讀書筆記(3)機器學習筆記
- 我的《機器學習實戰》讀書筆記(2)機器學習筆記
- 《IBM BPM實戰指南》讀書筆記IBM筆記
- DApp設計與開發 課程筆記(六):NFT交易市場後端開發APP筆記後端
- FFmpeg開發筆記全目錄(FFmpeg開發實戰詳解,含直播系統的搭建過程)筆記
- Angular4 實戰開發Angular