가수면
[Styled Components] Styled Components 본문
준비물
'styled-components' 플러그인
styled-components 설치하기( yarn add styled-components )
스타일 컴포넌트 적용하기
// src/App.js
import React from "react";
import styled from "styled-components";
// 1. styled-components를 만들었습니다.
const StBox = styled.div`
width: 100px;
height: 100px;
border: 1px solid ${(props) => props.borderColor}; // 4.부모 컴포넌트에서 보낸 props를 받아 사용합니다.
margin: 20px;
`;
const App = () => {
return (
<div>
// 2. 그리고 위에서 만든 styled-components를 사용했습니다.
// 3. 그리고 props를 통해 borderColor라는 값을 전달했습니다.
<StBox borderColor="red">빨간 박스</StBox>
<StBox borderColor="green">초록 박스</StBox>
<StBox borderColor="blue">파랑 박스</StBox>
</div>
);
};
export default App;
Swtich문과 map을 사용해서 리팩토링 해보기
// src/App.js
import React from "react";
import styled from "styled-components";
const StContainer = styled.div`
display: flex;
`;
const StBox = styled.div`
width: 100px;
height: 100px;
border: 1px solid ${(props) => props.borderColor};
margin: 20px;
`;
// 박스의 색을 배열에 담습니다.
const boxList = ["red", "green", "blue"];
// 색을 넣으면, 이름을 반환해주는 함수를 만듭니다.
const getBoxName = (color) => {
switch (color) {
case "red":
return "빨간 박스";
case "green":
return "초록 박스";
case "blue":
return "파란 박스";
default:
return "검정 박스";
}
};
const App = () => {
return (
<StContainer>
{/* map을 이용해서 StBox를 반복하여 화면에 그립니다. */}
{boxList.map((box) => (
<StBox borderColor={box}>{getBoxName(box)}</StBox>
))}
</StContainer>
);
};
export default App;
컴포넌트화
import React from "react";
import styled from "styled-components";
const StInput = (props) => {
const { fontSize, width, height, borderRadius, onChange, border, borderColor, margin, name, type } = props;
const styles = { borderRadius, width, height, fontSize, border, borderColor, margin, name, type };
return <Input {...styles} onChange={onChange} />;
};
StInput.defaultProps = {
borderRadius: "10px",
fontSize: "15px",
width: "80%",
height: "2.5rem",
border: "1px",
type: "text"
};
const Input = styled.input.attrs(props => ({
type: props.type
}))`
border: ${(props) => props.border} solid ${(props) => props.borderColor};
font-size: ${(props) => props.fontSize};
height: ${(props) => props.height};
width: ${(props) => props.width};
border-radius: ${(props) => props.borderRadius};
text-indent: 10px;
margin: ${(props) => props.margin};
name: ${(props) => props.name};
:focus{
outline: 2px solid #e6d96b;
border: 1px solid transparent
}
`;
export default StInput;
import 후 버튼 컴포넌트 사용
<StButton width="50%" height="40px" borderColor="red" onClick={() => onDeleteTodo(todo.id)}>
삭제하기
</StButton>
'React > 라이브러리' 카테고리의 다른 글
[Styled Components] Styled Components Global Style (0) | 2022.12.17 |
---|---|
[Redux] Redux ToolKit thunk (0) | 2022.12.10 |
[Redux] Redux ToolKit (0) | 2022.12.09 |
Router (0) | 2022.12.03 |
[Redux] Redux (0) | 2022.12.02 |
Comments