728x90
Styled-components
- 대표적인 CSS-in-JS 라이브러리이다.
- 클래스 명을 겹치지 않도록한다.
- 스타일에 관련되어서 props로 값을 전달해서 스타일 값을 적용시킬 수 있다.
💡 CSS-in-JS
- 스타일 정의를 CSS 파일이 아닌, JS로 작성된 컴포넌트에 바로 삽입되는 스타일 기법이다.
- 기존에 웹 사이트를 개발했을 때는 HTML, JS, CSS를 각자 별도의 파일에서 작업하는 것을 권장하였지만, react, Vue 등의 모던 자바스크립트 라이브러리가 인기를 끌면서 패러다임의 변화가 찾아왔다.
설치
npm i styled-components
기본문법
import styled from "styled-components";
export const TestBtn = styled.button`
border: 2px solid red;
width: 200px;
height: 50px;
`;
// Test 컴포넌트에 div태그를 지정하고 해당 태그의 style을 설정한다.
export const Test = styled.div`
/* vscode 확장 프로그램 설치 : vscode-styled-components */
border: 1px solid;
background-color: blue;
/* 컴포넌트로 전해진 props 값이 있으면 해당 값으로 지정. 아니면 width: 500px; */
width: ${(props) => props.width || "500px"};
height: 500px;
// & : 스타일이 적용되고 있는 대상
// 대상의 자식으로 login-title의 클래스를 가지고 있는 대상의 스타일을 적용한다.
& .login-title {
color: white;
font-size: 15px;
text-align: center;
}
// 선언이 되고 나서 사용이 되어야 하기 때문에 TestBtn 함수가 위에 있어야 한다.
// 해당 컴포넌트는 js코드이므로 템플릿 리터럴로 감싸줘야 한다.
& ${TestBtn} {
background-color: rgb(200, 190, 190);
}
`;
redux-thunk
- 비동기 작업을 처리할 때 많이 사용하는 미들웨어다.
- 객체가 아닌 함수형태의 액션을 디스패치할 수 있게 해준다.
- dispatch를 딜레이 시켜주는 역할이다.
store 적용 시 applyMiddleware로 thunk를 미들웨어로 적용시켜 준다.
- applyMiddleware : 반환되는 객체로 함수 미들웨어 추가
import { createStore, applyMiddleware } from "redux";
import reducer from "./reducer";
// 사용할 미들웨어는 thunk
import thunk from "redux-thunk";
export const store = createStore(reducer, applyMiddleware(thunk));
weather API를 이용한 간단한 사이트 제작
1. index.js_store를 사용할 수 있도록 Provider를 설정한다.
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
// 리덕스의 스토어를 사용할 수 있도록
import { Provider } from "react-redux";
import { store } from "./redux/store";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<Provider store={store}>
<App />
</Provider>
);
reportWebVitals();
2. loginAction.js_action으로 기능이 동작할 함수를 선언한다.
function login(id, pw) {
// 매개변수로 dispatch를 받고 함수로 반환한다.
return (dispatch) => {
dispatch({ type: "LOGIN", payload: { id, pw } });
};
}
function logout() {
return function (dispatch) {
dispatch({ type: "LOGOUT" });
};
}
export const logins = { login, logout };
3. index.js_로그인을 실행해줄 영역을 설정한다.
- 컴포넌트에서 style을 고정값으로 지정해줄 수 있다.
import React from "react";
import { LoginBoxWrap, LoginBoxInput } from "./Login.styled";
const LoginBox = () => {
return (
// width={"1000px"} - props 값으로 width 키로 넘어가는데 "1000px"라는 값이 넘어가는데
// 그럼 스타일 작업할 때 동적으로 스타일을 주고 싶으면 어떻게 하지?
<div>
<LoginBoxWrap width={"500px"}>
<p className="login-title">로그인 박스</p>
<LoginBoxInput>버튼</LoginBoxInput>
</LoginBoxWrap>
</div>
);
};
export default LoginBox;
4. weatherAction.js_API를 불러와 입력하는 지역에 맞는 날씨 정보를 받아온다.
// 요청 응답을 처리할 때
// axios
// 요청 응답 처리를 해줄 겁니디.
// axios 설치
// npm i axios
import axios from "axios";
function getWeather(name) {
return async (dispatch) => {
// api 작업. 데이터 요청
const data = await axios.get(
`https://api.openweathermap.org/data/2.5/weather?q=${name}&appid=개인 API Key`
);
// 요청의 처리가 끝나면
dispatch({ type: "GET_WEATHER", payload: data });
};
}
export const weather = { getWeather };
5. build 작업을 수행하여 코드 실행을 최적화한다.
npm run buil
더보기
- styled-components
- react-thunk
728x90
'블록체인_9기 > 🩵 React' 카테고리의 다른 글
51강_230718_React(React Hook함수 - useContext, useReducer, useCallback, useMemo) (0) | 2023.07.18 |
---|---|
49강_230710_React(Redux) (0) | 2023.07.10 |
48강_230706_React(Hook 함수(useNavigate, useLocation, useParams, useSearchParams), 상점 사이트 제작 ) (0) | 2023.07.06 |
47강_230705_React(Router, 가위바위보 제작) (0) | 2023.07.05 |
46강_230704_React(vscode_snippet, React 라이브러리, Hooks) (0) | 2023.07.04 |