[ReactJS] styled-components๐Ÿ’…

Joo Yeong Parkยท2020๋…„ 10์›” 10์ผ
1

develop

๋ชฉ๋ก ๋ณด๊ธฐ
1/8

์™œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์ง€?

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฐ๊ณผ ๊ฐœ์ธ์ ์œผ๋กœ ๋Š๋ผ๋Š” ์ ์€

  1. ๊ธฐ์กด์˜ ๋ช…์‹œ๋ฒ• ~<ํƒœ๊ทธ๋ช… className="์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์˜ ์ด๋ฆ„" ...>~๋ณด๋‹ค ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.
  2. props๋ฅผ ์ด์šฉํ•œ ๊ฐ€๋ณ€ ์Šคํƒ€์ผ๋ง์ด ๋” ์šฉ์ดํ•˜๋‹ค.
  3. ํ™•์žฅ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹๋‹ค.

๋ผ๋Š” ๊ฒƒ์ด๋‹ค. .css ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋‘๋งํ•  ๊ฒƒ ์—†๊ณ !

๋ฌธ๋ฒ•

์•„์ฃผ ๊ฐ„๋‹จํ•ด์„œ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค //์ฐฉ๊ฐ์ด์—ˆ๋‹ค!

๋จผ์ € import styled from 'styled-components' ํ•ด์ฃผ๊ณ 

const ์ด๋ฆ„=styled.ํƒœ๊ทธ๋ช…`์Šคํƒ€์ผ`

์ฃผ์˜ํ•  ์ ์€ ๋ฐ˜๋“œ์‹œ render ๋ฉ”์†Œ๋“œ ๋ฐ–์—์„œ ์„ ์–ธํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ ์ •๋„.

๊ฐ€๋ณ€์Šคํƒ€์ผ๋ง์—์„œ ๋ฌธ์ œ

styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ํ–ˆ๋˜ ๊ฐ€๋ณ€ ์Šคํƒ€์ผ๋ง ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

import React, {useState} from 'react'  
import styled from 'styled-components'

const TodoItem =({id, contents, is\_com, is\_del})=>{  
const \[isCompleted, setIsCompleted\] = useState(is\_com===1?true:false)

return(
    <div>               
        <TodoContents color={is_com}>
            {contents}
        </TodoContents>
    </div>
);

}

const TodoContents=styled.div `color: ${(props) => props===1?"blue":"black"}`

export default TodoItem;  

์œ„์˜ ์ฝ”๋“œ์—์„œ ๊ฐ€๋ณ€ ์Šคํƒ€์ผ๋ง์ด ์ „ํ˜€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋“ค์—์„œ ๋ดค์„ ๋•Œ ๋Œ€๋ถ€๋ถ„ ์‚ผํ•ญ์—ฐ์‚ฐ์ž์— ์กฐ๊ฑด์„ ๋‹ฌ์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ทธ๊ฒŒ ์ด์œ ์ธ๊ฐ€?
์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ์— props๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ์—†๋Š” ๊ฒฝ์šฐ๋งŒ ์ฒดํฌํ•˜๋Š” ๊ฑธ๊นŒ?

์ฐ์ฐํ•œ ํ•ด๊ฒฐ

์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ์˜ props๋ฅผ ์ด์šฉํ•œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ˆ™์ œ
์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์œ„์—์„œ ์ฃผ๊ณ  ์‹ถ์€ ํšจ๊ณผ๋Š” ๋งŒ๋“ค์–ด ๋ƒˆ๋‹คโœŒ

import React, {useState} from 'react'
import styled from 'styled-components'

const TodoItem =({id, contents, is_com, is_del})=>{  
    const [isCompleted, setIsCompleted] = useState(is_com===1?true:false)  

    return(
        <div>             
            {isCompleted?
                <TodoContents completed>{contents}</TodoContents>
            :
                <TodoContents uncompleted>{contents}</TodoContents>
            }
        </div>
    );
}

const TodoContents=styled.div`
    color: ${props => {
        return props.completed?"gray":"black"
    }}
`

export default TodoItem;

isCompleted ๋ณ€์ˆ˜ ๊ฐ’์— ๋”ฐ๋ฅธ ๋ Œ๋”๋ง์€ JSX+styled-components๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋จผ์ € isCompleted๊ฐ’์ด true์ธ ๊ฒฝ์šฐ์™€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ  ์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ์˜ props๋ฅผ ๋‹ฌ๋ฆฌ์ค˜์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

๋งˆ์Œ์— ์™ ๋“œ๋Š” ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋‚˜์ค‘์— ๋‹ค์‹œ ์—ฐ๊ตฌํ•ด๋ณด๋Š” ๊ฑธ๋กœ!โœจ

profile
์›น ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ์‚์•ฝ

0๊ฐœ์˜ ๋Œ“๊ธ€