react四種組件中DOM樣式設(shè)置方式詳解
1、行內(nèi)樣式
想給虛擬dom添加行內(nèi)樣式,需要使用表達式傳入樣式對象的方式來實現(xiàn)
行內(nèi)樣式需要寫入一個樣式對象,而這個樣式對象的位置可以放在很多地方
例如:render函數(shù)里、組件原型上、外鏈js文件中
注意:這里的兩個括號,第一個表示我們在要JSX里插入JS了,第二個是對象的括號
<p style={{color:'red', fontSize:'14px'}}>Hello world</p>
2、使用class
React推薦我們使用行內(nèi)樣式,因為React覺得每一個組件都是一個獨立的整體
其實我們大多數(shù)情況下還是大量的在為元素添加類名,但是需要注意的是,class需要寫成className(因為畢竟是在寫類js代碼,會收到j(luò)s規(guī)則的現(xiàn)在,而class是關(guān)鍵字)
import React, { Component } from 'react'
1. 外部引入定義的樣式
import styles from './style.css'
class ClassStyle extends Component {
render() {
// js邏輯
let className = cx({
font: false
})
return (
<>
<div className={className}>hello</div>
<p className='setstyle'>樣式</p>
<DivContainer>
world
</DivContainer>
<>
)
}
}
export default ClassStyle
3、classNames不同的條件添加不同的樣式
有時候需要根據(jù)不同的條件添加不同的樣式,比如:完成狀態(tài),完成是綠色,未完成是紅色。那么這種情況下,我們推薦使用classnames這個包:
目的:
由于react原生動態(tài)添加多個className會報錯
import style from './style.css'
<div className={style.class1 style.class2}</div>
想要得到最終渲染的效果是:
<div class='class1 class2'></div>
下載安裝
npm i -S classnames
使用
import classnames from 'classnames'
<div className=classnames({
'class1': true,
'class2': true
)>
</div>
4、css-in-js
styled-components是針對React寫的一套css-in-js框架,簡單來講就是在js中寫css。npm鏈接
- 傳統(tǒng)的前端方案推崇"關(guān)注點分離"原則,HTML、CSS、JavaScript 應(yīng)該各司其職,進行分離。
- 而在react項目中,更提倡組件化方案,自然形成了將HTML、CSS、JavaScript集中編寫管理的方式。
styled-components 應(yīng)該是CSS-in-JS最熱門的一個庫,通過styled-components,你可以使用ES6的標簽?zāi)0遄址Z法,為需要styled的Component定義一系列CSS屬性,當(dāng)該組件的JS代碼被解析執(zhí)行的時候,styled-components會動態(tài)生成一個CSS選擇器,并把對應(yīng)的CSS樣式通過style標簽的形式插入到head標簽里面。動態(tài)生成的CSS選擇器會有一小段哈希值來保證全局唯一性來避免樣式發(fā)生沖突。
1.安裝
npm i -S styled-components
定義樣式
2.樣式j(luò)s文件
import styled from 'styled-components'
const Title = styled.div`
color:red;
font-size:16px;
h3{
color:blue;
font-size:20px;
}
`
export {
Title
}
顯示
就像使用常規(guī) React 組件一樣使用 Title
import React, { Component } from 'react'
import { Title } from './Styles'
class App extends Component {
render() {
return (
<div>
<Title>
我只是一個標題
<h3>你好世界</h3>
</Title>
</div >
);
}
}
export default App
3.樣式繼承
樣式
import styled from 'styled-components'
const Button = styled.button`
font-size: 20px;
border: 1px solid red;
border-radius: 3px;
`;
// 一個繼承 Button 的新組件, 重載了一部分樣式
const Button2 = styled(Button)`
color: blue;
border-color: yellow;
`;
export {
Button,
Button2
}
顯示
import React, { Component } from 'react'
import {
Button,
Button2
} from './Styles'
class App extends Component {
render() {
return (
<div>
<Button>我是一個按鈕1</Button>
<Button2>我是一個按鈕2</Button2>
</div >
);
}
}
export default App
4.屬性傳遞
樣式
import styled from 'styled-components'
const Input = styled.input`
color: ${props => props.inputColor || "blue"};
border-radius: 3px;
`;
export {
Input
}
顯示
import React, { Component } from 'react'
import { Input } from './Styles'
class App extends Component {
render() {
return (
<div>
<Input defaultValue="你好" inputColor="red"></Input>
</div >
);
}
}
export default App
到此這篇關(guān)于react之四種組件中DOM樣式設(shè)置方式的文章就介紹到這了,更多相關(guān)react組件DOM樣式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Webpack+Babel+React開發(fā)環(huán)境的搭建的方法步驟
本篇文章主要介紹了詳解Webpack+Babel+React開發(fā)環(huán)境的搭建的方法步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
ReactRouterV6如何獲取當(dāng)前路由參數(shù)
這篇文章主要介紹了ReactRouterV6如何獲取當(dāng)前路由參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
學(xué)習(xí)ahooks useRequest并實現(xiàn)手寫
這篇文章主要為大家介紹了學(xué)習(xí)ahooks useRequest并實現(xiàn)手寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
react實現(xiàn)一個優(yōu)雅的圖片占位模塊組件詳解
這篇文章主要給大家介紹了關(guān)于react如何實現(xiàn)一個還算優(yōu)雅的占位模塊圖片組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
react用Redux中央倉庫實現(xiàn)一個todolist
這篇文章主要為大家詳細介紹了react用Redux中央倉庫實現(xiàn)一個todolist,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
React中常見的TypeScript定義實戰(zhàn)教程
這篇文章主要介紹了React中常見的TypeScript定義實戰(zhàn),本文介紹了Fiber結(jié)構(gòu),F(xiàn)iber的生成過程,調(diào)和過程,以及 render 和 commit 兩大階段,需要的朋友可以參考下2022-10-10
React Native實現(xiàn)簡單的登錄功能(推薦)
這篇文章主要介紹了React Native實現(xiàn)登錄功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09

