React My React - CSS module & Style Components

KEY

當渲染一系列的資料,記得加上 key props 來讓 React 更好的渲染


CSS

撰寫 inline style 時,與一般 HTML 不太一樣的地方

用雙花括,也可以在裡面進行判斷式

注意:使用 camelCase,而非 Dash border-color

<label style=> </label>
<label style=></label>

將 CSS 變成區域性

不管在哪個元件引入 CSS,都是屬於 global

意即有可能會名稱重覆,導致樣式跑掉、汙染等等

有兩種做法可以將 CSS 變成區域性

  • CSS module
  • Styled Components

CSS module

將 CSS 模組化,引入時以物件的形式,直接像操作物件的方式即可

步驟:

  • CSS 改名為 name.module.css
  • 引入的地方改為 import styles from './name.module.css'
  • 名稱改 className={styles.button}
const Button = props => {
  return (
    <button type={props.type} className={styles.button} onClick={props.onClick}>
      {props.children}
    </button>
  )
}

可以注意到 class 後面部分,產生了獨特的亂碼

增刪樣式


Styled Components

概念與 CSS module 類似,皆會產生獨一無二的 class 名稱

但寫法是寫在 JS 裡面,也就是不用另外的 CSS 檔案

寫法:

  • styled 後面選擇需要的 tag
  • 前面直接寫入樣式
  • 後續樣式則用&
  • RWD 直接寫入即可
import styled from "styled-components"

const Button = styled.button`
  width: 100%;
  font: inherit;
  padding: 0.5rem 1.5rem;
  border: 1px solid #8b005d;
  color: white;
  background: #8b005d;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.26);
  cursor: pointer;

  @media (min-width: 768px) {
    width: auto;
  }

  &:focus {
    outline: none;
  }

  &:hover,
  &:active {
    background: #ac0e77;
    border-color: #ac0e77;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.26);
  }
`

也可以直接在 JS 裡面判斷狀態來更改樣式,很方便 一樣在 HTML 地方利用 props,圖片為 invalid={!isValid}