You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 리액트 리덕스 예제 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.Experience-Porthcawl.com team, along with other related topics such as: 리액트 리덕스 예제 React-redux 예제, 리덕스 값 가져 오기, 리액트 리덕스 로그인, 리액트 리덕스 설치, React-redux, 리 액트 액션, React-redux 게시판 예제, 리액트 리덕스 강의
[React] 리덕스 총정리 및 예제
- Article author: itprogramming119.tistory.com
- Reviews from users: 26395 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about [React] 리덕스 총정리 및 예제 [React] 리덕스 총정리 및 예제. 코딩병원 2022. 3. … 이러한 Redux는 가장 많이 사용하는 리액트 상태 관리 라이브러리입니다. Redux를 사용하면 … …
- Most searched keywords: Whether you are looking for [React] 리덕스 총정리 및 예제 [React] 리덕스 총정리 및 예제. 코딩병원 2022. 3. … 이러한 Redux는 가장 많이 사용하는 리액트 상태 관리 라이브러리입니다. Redux를 사용하면 … [Redux란?] 1. Redux 등장 배경 MVC 패턴 형식으로 state가 변화되면 Model, View, Controller에 이벤트가 발생하고 값이 변화하는 구조였습니다. 즉, 양방향 데이터 흐름이었죠. 양방향 데이터 흐름은 복잡하고..
- Table of Contents:
네비게이션
[React] 리덕스 총정리 및 예제 [Redux란] [Action] [Reducer] [Store] [Dispatch] [Redux의 3가지 규칙]사이드바
검색
티스토리툴바
(React-Redux) 리액트 리덕스를 이용한 간단한 프로젝트 및 설명
- Article author: eunhee-programming.tistory.com
- Reviews from users: 49449 Ratings
- Top rated: 4.1
- Lowest rated: 1
- Summary of article content: Articles about (React-Redux) 리액트 리덕스를 이용한 간단한 프로젝트 및 설명 react-redux: 리액트 환경 맞는 리덕스를 사용할 수 있게 해줌. … to log results (for example: reportWebVitals(console.log)) // or send to an … …
- Most searched keywords: Whether you are looking for (React-Redux) 리액트 리덕스를 이용한 간단한 프로젝트 및 설명 react-redux: 리액트 환경 맞는 리덕스를 사용할 수 있게 해줌. … to log results (for example: reportWebVitals(console.log)) // or send to an … 리액트 리덕스를 이용한 간단한 프로젝트 리덕스를 사용하여 간단한 프로그램을 제작하면서, 리덕스를 더욱 잘 이해하기위해 포스팅을 제작하였습니다. 자료들을 참고하여 공부하며, 윗 쪽에는 버튼을 누르면..
- Table of Contents:
태그
관련글
댓글0
공지사항
최근글
인기글
최근댓글
전체 방문자
티스토리툴바
[React.js] #7 Redux(리덕스) 따라해보기!
- Article author: real-dongsoo7.tistory.com
- Reviews from users: 26106 Ratings
- Top rated: 4.1
- Lowest rated: 1
- Summary of article content: Articles about [React.js] #7 Redux(리덕스) 따라해보기! 이번 포스팅에서는 간단한 예제들을 따라 해 보며 리덕스에 조금 더 … 리액트에서는 이전 상태와 액션을 통해 다음 상태를 반환하는 순수 함수로 … …
- Most searched keywords: Whether you are looking for [React.js] #7 Redux(리덕스) 따라해보기! 이번 포스팅에서는 간단한 예제들을 따라 해 보며 리덕스에 조금 더 … 리액트에서는 이전 상태와 액션을 통해 다음 상태를 반환하는 순수 함수로 … 지난 포스팅에서 리덕스에 대한 내용을 간단히 알아보았습니다. 이번 포스팅에서는 간단한 예제들을 따라 해 보며 리덕스에 조금 더 익숙해지는 시간을 가져보도록 합시다. 지난 포스팅에서 리덕스의 세 가지 핵심..
- Table of Contents:
탕구리’s 블로그
[Reactjs] #7 Redux(리덕스) 따라해보기! 본문티스토리툴바
Redux의 흐름과 예제
- Article author: ivorycode.tistory.com
- Reviews from users: 43572 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about Redux의 흐름과 예제 1. useDispatch 는 리덕스 스토어의 dispatch를 함수에서 사용할 수 있게 해주는 react-redux에서 제공하는 hook이다. 이것을 이용하여 각각의 액션들을 … …
- Most searched keywords: Whether you are looking for Redux의 흐름과 예제 1. useDispatch 는 리덕스 스토어의 dispatch를 함수에서 사용할 수 있게 해주는 react-redux에서 제공하는 hook이다. 이것을 이용하여 각각의 액션들을 … Redux의 3가지 원칙 1. 하나의 애플리케이션 안에는 하나의 스토어만 사용하자. 특정 업데이트가 빈번하게 일어나거나, 애플리케이션 특정 부분을 분리시키게 되면, 여러 개의 스토어를 사용할 수 있다, 하지만, R..실수도 잦고 엉망진창이지만, 언젠가 모두에게 유익한 서비스를 제공하는 꿈을 가진 초보 Frontend 입니다.
- Table of Contents:
Redux의 흐름과 예제
Redux의 3가지 원칙
Redux Flow
Counter 예제 만들어보기
1. 리덕스 프로젝트 준비하기 · GitBook
- Article author: react.vlpt.us
- Reviews from users: 15558 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 1. 리덕스 프로젝트 준비하기 · GitBook 리덕스 미들웨어를 공부해보기 전에, 리덕스 프로젝트를 먼저 새로 생성해주도록 하겠습니다. … redux react-redux. 이제, 카운터 예제를 만들어보도록 하겠습니다. …
- Most searched keywords: Whether you are looking for 1. 리덕스 프로젝트 준비하기 · GitBook 리덕스 미들웨어를 공부해보기 전에, 리덕스 프로젝트를 먼저 새로 생성해주도록 하겠습니다. … redux react-redux. 이제, 카운터 예제를 만들어보도록 하겠습니다.
- Table of Contents:
[React/Redux] 리액트 리덕스 사용해보기
- Article author: bamtory29.tistory.com
- Reviews from users: 14658 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about [React/Redux] 리액트 리덕스 사용해보기 일반 리액트앱에 리덕스를 이용하면 상태 관리 로직을 따로 만들고 관리 … 그리고 이것으로 리덕스를 이용한 앱의 상태 변화 예제를 마치겠습니다. …
- Most searched keywords: Whether you are looking for [React/Redux] 리액트 리덕스 사용해보기 일반 리액트앱에 리덕스를 이용하면 상태 관리 로직을 따로 만들고 관리 … 그리고 이것으로 리덕스를 이용한 앱의 상태 변화 예제를 마치겠습니다. 지난번에 리덕스에 대해 소개를 했으니 이번에는 리덕스를 간단하게 사용해볼 차례입니다. 일반 리액트앱에 리덕스를 이용하면 상태 관리 로직을 따로 만들고 관리가 가능해져, 프로젝트의 유지보수가 쉬워지고 다..
- Table of Contents:
1 카운터Todo 프로그램
2 리덕스 코드 작성
3 리액트 앱에 리덕스 적용하기
4 컨테이너 컴포넌트
관련글
댓글0
최근글
인기글
태그
전체 방문자
티스토리툴바
예제를 통해 리덕스(redux)를 연습해봅시다.
- Article author: justmakeyourself.tistory.com
- Reviews from users: 9418 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about 예제를 통해 리덕스(redux)를 연습해봅시다. redux와 react-redux를 다운받을 수 있습니다. 해당 모듈들을 다운로드 했다면 이제 리덕스 폴더를 만들어보도록 하겠습니다. src/reducers/index.js 파일 … …
- Most searched keywords: Whether you are looking for 예제를 통해 리덕스(redux)를 연습해봅시다. redux와 react-redux를 다운받을 수 있습니다. 해당 모듈들을 다운로드 했다면 이제 리덕스 폴더를 만들어보도록 하겠습니다. src/reducers/index.js 파일 … 먼저 다운로드 해야할 것들이 있습니다. 저번 시간에 만든 버튼 앱에 리덕스를 적용시키려면 우선 다운 받아야할 것들이 있습니다. yarn add redux react-redux 해당 명령어를 콘솔에서 실행시켜주세요. redux와 r..
- Table of Contents:
[Redux] 리덕스 예제 2 ( react-redux 사용하여 만들기 )
- Article author: livelikeabel.tistory.com
- Reviews from users: 28845 Ratings
- Top rated: 4.2
- Lowest rated: 1
- Summary of article content: Articles about [Redux] 리덕스 예제 2 ( react-redux 사용하여 만들기 ) [Redux] 리덕스 예제 2 ( react-redux 사용하여 만들기 ). Abel ko 2018. 2. 9. 22:53. 출처 : https://velopert.com/1266. 디렉토리 구조 …
- Most searched keywords: Whether you are looking for [Redux] 리덕스 예제 2 ( react-redux 사용하여 만들기 ) [Redux] 리덕스 예제 2 ( react-redux 사용하여 만들기 ). Abel ko 2018. 2. 9. 22:53. 출처 : https://velopert.com/1266. 디렉토리 구조 출처 : https://velopert.com/1266 디렉토리 구조 src ├── actions │ └── index.js ├── components │ ├── App.js │ ├── Buttons.js │ ├── Counter.js │ └── Option.js ├── index.js..
- Table of Contents:
See more articles in the same category here: Top 74 tips update new.
(React-Redux) 리액트 리덕스를 이용한 간단한 프로젝트 및 설명
반응형
리액트 리덕스를 이용한 간단한 프로젝트
리덕스를 사용하여 간단한 프로그램을 제작하면서,
리덕스를 더욱 잘 이해하기위해 포스팅을 제작하였습니다.
자료들을 참고하여 공부하며,
윗 쪽에는 버튼을 누르면 1씩 증가하게,
아랫쪽은, 제가 원하는 숫자를 넣으면, 그 숫자만큼 더해지는 프로그램을 제작하려고 합니다.
포스팅 요약
1. 프로그램을 만들기전 간단한 정리
2. 프로그램 만들기
3. 참고 포스팅 및 강의 링크들
1. 프로그램을 만들기전 간단한 정리
1) Provider란?
– Provider은 react-redux라이브러리 안에 있는 컴포넌트입니다.
– 리액트 앱에 스토어를 쉽게 연결하기 위한 컴포넌트 입니다.
2) combineReducer란?
– redux모듈이 제공하는 함수이다.
– 만든 모든 리듀서들을 통합하여 하나의 리듀서로 쓰기 위한 함수이다
3) useSelector란?
– redux의 state조회 (즉, 스토어에 있는 데이터들 조회)
4) useDispatch란?
– 생성한 action 실행
2. 프로그램 만들기
*counter, CounterContainers, Counter:
버튼 클릭시 1씩 증가 혹은 감소하는 프로그램을 위한 모듈과 컨테이너
*counter2, CounterContainers2, Counter2:
원하는 숫자 기입시, 기입한 숫자만큼 증가하는 프로그램을 위한 모듈과 컨테이너
1) 리액트 리덕스 실행
yarn add redux react-redux
혹은
npm install redux react-redux
react-redux: 리액트 환경 맞는 리덕스를 사용할 수 있게 해줌.
참고 링크: 리덕스 관련 npm 라이브러리 설치
2) Provider로 감싸기
file: src/index.js
import React from “react”; import ReactDOM from “react-dom”; import “./index.css”; import App from “./App”; import { createStore } from “redux”; import { Provider } from “react-redux”; import rootReducer from “./module/index”; const store = createStore(rootReducer); ReactDOM.render(
, document.getElementById(“root”) ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 3) 사용될 모듈 만들기
file: src/module/counter.js
* 버튼 클릭 시, ‘+’버튼 클릭시 1씩 증가, ‘-‘버튼 클릭시 1씩 감소
const INCREASE = “counter/INCREASE”; const DECREASE = “counter/DECREASE”; export const increase = () => ({ type: INCREASE }); export const decrease = () => ({ type: DECREASE }); const initialState = 0; export default function counter(state = initialState, action) { switch (action.type) { case INCREASE: return state + 1; case DECREASE: return state – 1; default: return state; } }
file: src/module/counter2.js
* 버튼 클릭시, input에 적힌 숫자 만큼 증가
const INCREASE = “counter2/INCREASE”; const initialState = { value: 0, }; export const increase = (num) => ({ type: INCREASE, number: num, }); export default function counter2(state = initialState, action) { switch (action.type) { case INCREASE: return { …state, value: state.value + parseInt(action.number) }; default: return state; } }
4) combinereducer로 리듀서 함수들 통합하기
file: src/module/index.js
* 위 두개 모듈 하나로 통합해줌.
(모듈이 수억개라고 생각하면, combineReducers의 편리함을 알 수 있음. )
import { combineReducers } from “redux”; import counter from “./counter”; import counter2 from “./counter2”; const rootReducer = combineReducers({ counter, counter2 }); export default rootReducer;
5) 컨테이너 만들기
file: src/Containers/CounterContainers.js
import React from “react”; import Counter from “../components/Counter”; import { useSelector, useDispatch } from “react-redux”; import { increase, decrease } from “../module/counter”; const CounterContainers = () => { const number = useSelector((state) => state.counter); const dispatch = useDispatch(); const onIncrease = () => { dispatch(increase()); }; const onDecrease = () => { dispatch(decrease()); }; return (
); }; export default CounterContainers; file: src/Containers/CounterContainer2.js
import React from “react”; import Counter2 from “../components/Counter2”; import { useSelector, useDispatch } from “react-redux”; import { increase } from “../module/counter2”; const CounterContainer2 = () => { const number2 = useSelector((state) => state.counter2); const dispatch = useDispatch(); const onIncrease2 = (num) => { dispatch(increase(num)); }; return
; }; export default CounterContainer2; 6) 화면에 보여줄 컴포넌트
file: src/components/Counter.js
import React from “react”; const Counter = ({ number, onIncrease, onDecrease }) => { return (
{number}
); }; export default Counter;
file: src/components/Counter2.js
import React, { useState } from “react”; const Counter2 = ({ number2, onIncrease2 }) => { const [num, setNum] = useState(0); const onChange = (e) => { setNum(e.target.value); }; return (
CounterContainer2
DisplayNum
{number2}
); }; export default Counter2;
7) App에 컨테이너 넣기
import React from “react”; import CounterContainers from “./Containers/CounterContainers”; import CounterContainer2 from “./Containers/CounterContainer2”; const App = () => { return (
); }; export default App;
8) 결과
– 이미지 화면
– 영상
3. 참고 포스팅 및 강의 링크들
– 강의
유튜브 생활코딩님 강의
– 참고 블로그
https://react.vlpt.us/redux-middleware/01-prepare.html
* 이 블로그에서 배울게 매우 많습니다.
반응형
[React.js] #7 Redux(리덕스) 따라해보기!
반응형
지난 포스팅에서 리덕스에 대한 내용을 간단히 알아보았습니다.
이번 포스팅에서는 간단한 예제들을 따라 해 보며 리덕스에 조금 더 익숙해지는 시간을 가져보도록 합시다.
지난 포스팅에서 리덕스의 세 가지 핵심 개념에 대해서 언급했었는데요.
가장 먼저 액션에 대해서 알아봅시다.
액션은 애플리케이션에서 스토어로 보내는 데이터 묶음입니다. 이들이 스토어의 유일한 정보원이 됩니다.
여러분은 store.dispatch()를 통해 이들을 보낼 수 있습니다.
라고 나와 있습니다.
액션이 생성되면 상태가 변화될 때 dispatch를 통해 reducer로 보내주게 되는 구조라고 언급했었습니다. 액션을 다루면서 해주어야 할 작업은 “액션 타입 선언”과 “액션 생성 함수”를 만들어 주는 것입니다.
액션 타입 선언
# 액션 타입 const INCREMENT = ‘counter/INCREMENT’; const DECREMENT = ‘counter/DECREMENT’; # 액션 { type: INCREMENT, text: ‘hello world’ } { type: DECREMENT }
액션을 선언하는 방법은 어렵지 않습니다.
액션은 자바스크립트 객체입니다. type을 반드시!! 포함해야 하고 이외의 부분은 마음대로 정의하면 된다고 합니다.
액션은 스토어에 데이터를 넣을 수 있는 유일한 방법이기 때문에 어떤 방식을 사용하더라도 최종적으로는 액션을 통해 스토어에 전달됩니다.
액션 생성자
function increse(value) { return { type: INCREMENT, value } } const increse = (value) => ({ type: INCREMENT, value })
액션 생성자는 우리가 위에서 만들었던 액션이 실제도 동작할 수 있도록 도와주는 함수입니다.
이렇게 액션 생성자를 생성한 후 dispatch를 통해 reducer로 전달시켜 상태(state)와 액션(action)을 조합하는 과정이 진행됩니다.
dispatch(increment(value)) dispatch(decrement(value))
요로코롬 액션 생성자를 디스패치 시켜줄 수 있습니다.
액션 다루기
액션을 다루기 위해서는 reducer를 사용해야 합니다. 제가 처음 reducer 함수를 접했을 때는 이해가 잘 안 갔었는데, 진짜 간단하게 이야기하면 “파라미터를 조합하여 하나의 결과물로 만든다.” 정도로 이해하고 있었습니다.
리액트에서는 이전 상태와 액션을 통해 다음 상태를 반환하는 순수 함수로 이해하시면 좋을 것 같습니다.
(previousState, action) => newState
그리고 한번 더 말씀드리지만 “리듀서는 순수 함수”여야 합니다.
export default function reducer(state = initalState, action) { switch(action.type) { case INCREMENT: return { number: state.number+1 } case DECREMENT: return { number: state.number-1 } default: return state } }
문서에서는 swtich문을 선호하지는 않는 것 같습니다. switch문 외에도 여러 가지 방법이 있으니 차차 알아가 보도록 하겠습니다.
카운트 값을 조작하는 액션 외에도 생뚱맞지만 로그인 여부를 구분하는 액션도 있다고 가정해 봅시다.
export const LOG_IN = ‘log/IN’ export const LOG_OUT = ‘log/OUT’ export const INCREMENT = ‘counter/INCREMENT’; export const DECREMENT = ‘counter/DECREMENT’; const initialState = { isLogged : true, number : 0 } export const login = () => ({ type: LOG_ON }) export const logout = () => ({ type: LOG_OUT }) export const increase = (value) => ({ type: INCREMENT }) export const decrease = (value) => ({ type: DECREMENT }) export default function reducer(state = initalState, action) { switch(action.type) { case INCREMENT: return { number: state.number+1 } case DECREMENT: return { number: state.number-1 } case LOG_IN: return { isLogged : true } case LOG_OUT: return { isLogged : false } default: return state } }
이렇게 전혀 연관성이 없는 increase와 decrease 그리고 login과 logout이 하나의 리듀서에 있습니다. 지금은 굉장히 단순한 로직을 담고 있지만 코드가 복잡해지게 된다면 관리하기 굉장히 불편하고 가독성이 떨어집니다. 그래서 리듀서를 각각 분리하여 관리할 수 있도록 수정해 보겠습니다.
function counter(state, action) { switch(action.type) { case INCREMENT: return state+1 case DECREMENT: return state-1 defualt: return state } } function logged( state, action) { switch(action.type) { case LOG_IN: return true case LOG_OUT: return false default: return false } } export default function reducer(state = initalState, action) { return { counter : counter(state.number, action), isLogged: logged(state.isLogged, action) } }
이렇게 하나의 리듀서를 용도에 따라 여러 개로 분리할 수 있고 여러 개의 리듀서를 하나의 리듀서로 합칠 수도 있습니다.
또한, 리덕스는 보일러 플레이트 로직을 지원하는 combineReducers()라는 유틸리티를 제공합니다. conbineReducers()를 활용하면 다음과 같이 재작성할 수 있습니다.
import { combineReducers } from ‘redux’; const counter_logged = combineReducers({ counter, logged }); export defualt counter_logged ===========================같은 코드 입니다=========================== export default function reducer(state = initalState, action) { return { counter : counter(state.number, action), isLogged: logged(state.isLogged, action) } }
이번 포스팅에서는 액션과 액션 생성자를 만들어보고 이후 리듀서를 조작해보는 부분까지 간단한 예제를 만들어 보면서 정리해보았는데 여러 번 보다 보니 어느정도 이해는 가는데 아직 손에 그렇게 익은 상태는 아닌 것 같아요. 앞으로도 계속 하나씩 따라 해 가며 기초를 탄탄하게 다져보도록 하겠습니다.
저의 포스팅은 주관적인 내용이 상당히 많이 존재합니다.
그렇기 때문에 설명이 잘못되거나 모자란 부분이 존재할 수 있음을 양해하여 읽어주시면 감사하겠습니다.
탕빠이!
반응형
Redux의 흐름과 예제
반응형
Redux의 3가지 원칙
1. 하나의 애플리케이션 안에는 하나의 스토어만 사용하자.
특정 업데이트가 빈번하게 일어나거나, 애플리케이션 특정 부분을 분리시키게 되면, 여러 개의 스토어를 사용할 수 있다, 하지만, Redux는 하나의 애플리케이션에서 여러 개의 스토어 사용을 권장하지 않는 이유는 개발 도구를 활용하지 못하게 되어 디버깅이 어려워지기 때문이다. 그러니 하나의 스토어만 사용하여 디버깅을 용이하게 하고, 서버와의 직렬화를 통해 클라이언트에서 데이터를 쉽게 받아올 수 있도록 한다.
2. state는 읽기 전용이다.
Redux는 state를 변경할 때, 기존 값은 건드리지 않고, action을 일으켜 새로운 state를 생성하여 업데이트해주는 방식이다. 이것은 Redux 고유의 불변성을 지키고, state를 변경하려는 의도를 파악하고 디버깅을 용이하게 한다.
3. Reducer는 순수 함수여야 한다.
변화를 일으키는 Reducer는 반드시 순수 함수여야 한다. 순수 함수가 다음 조건을 만족해야 한다.
Reducer 함수는 이전 state와 action 객체를 parameter로 받는다.
parameter외의 값에 의존해선 안된다.
이전 state는 건드리지 않고, 변화를 준 새로운 state 객체를 만들어서 리턴한다.
같은 parameter로 호출된 Reducer 함수는 언제나 같은 결과를 리턴해야 한다.
Redux Flow
지금부터 아래의 이미지와 함께 Redux의 전체 흐름에 대해 정리해보자.
Redux Flow 이미지 출처: www.google.com
초기 상태
– store에서 reducer를 호출하고 리턴 값을 초기로 상태로 저장한다.
– UI가 최초 렌더링 될 때, UI 컴포넌트는 store의 state에 접근하여 렌더링에 활용한다. 그리고 그 state가 업데이트되는 것을 subscribe 한다.
Flow(업데이트) 순서
Deposit $10 버튼을 클릭한다. dispatch 함수를 실행시켜 action을 일으킨다. store에선 이전 state와 현재의 action으로 reducer함수를 실행하고, 리턴된 값을 새로운 state로 저장한다. store에서 store를 subscribe하고 있던 UI 컴포넌트들 에게 업데이트 여부를 알린다. store의 데이터가 필요한 각각의 컴포넌트들은 state가 업데이트되었는지 확인한다. 데이터가 변경된 요소들은 새로운 데이터로 강제 리렌더링 되므로화면에 표시되는 내용을 업데이트할 수 있다.
Counter 예제 만들어보기
카운터 예제를 통해 Redux를 직접 활용해보도록 하자!! 참고로 React를 활용하여 Redux를 적용해볼 계획이니, 이점 반드시 참고하길 바랍니다!!
# 프로젝트 생성
# react 프로젝트 생성 npx create-react-app redux_counter
# 리덕스 설치하기
# redux 설치하기 # NPM npm install redux # Yarn yarn add redux # react-redux 설치하기 # react에서 redux를 사용하려면 redux와 react-redux 모두 설치해줘야 한다. # NPM npm install react-redux # Yarn yarn add react-redux
# 폴더 구조
Ducks 패턴을 적용한 예제
예전엔 src 폴더에 store(또는 module)라는 디렉토리를 생성해서 그 안에 action, reducer, type이라는 디렉토리를 생성하고 각각에 맞는 Redux파일을 작성했었다. 그러나 하나의 기능을 수정하려고 하면, 해당 기능과 관련된 여러 개의 파일을 수정해야 하는 일이 발생하는데, 이러한 불편함을 개선하고자 나온 것이 Ducks 패턴이다. Ducks 패턴은 구조 중심이 아니라 기능중심으로 파일을 나누기 때문에 단일 기능을 작성할 때나 기능을 수정할 때 하나의 파일만 다루면 되므로 직관적인 코드 작성이 가능하다. 폴더구조는 개인 또는 프로젝트마다 관리하는 방법이 다르므로 정답은 없다. 그 외 나머지는 CRA 폴더 구조와 동일하다.
1. action type, action creator 생성
src/store/modules/counter.js
// Actions const INCREMENT = “INCREMENT”; const DECREMENT = “DECREMENT”; // Action Creator export const increment = () => { return { type: INCREMENT, }; } export const decrement = () => { return { type: DECREMENT, }; }
1. 카운터에 필요한 +, – 2가지 액션을 만들어 준다. 이때, 타입명은 중복이 되지 않도록 작성한다.
2. 다음은 액션 생성 함수를 만들어 주면 되는데, 이때 액션 생성 함수는 나중에 컴포넌트에서 사용될 함수이므로 export 키워드를 반드시 붙여준다.
🆘 액션(action)
state에 변화를 일으킬 때 참조하는 객체
2. reducer 생성
src/store/modules/counter.js
// 초기값 설정 const initialState = { number: 0, }; // counterReducer export default function counter(state = initialState, action) { switch (action.type) { case INCREMENT: return { number: state.number + 1, }; case DECREMENT: return { number: state.number – 1, }; default: return state; } }
1. 카운터에 적용될 초기값을 설정해준다. 보통 initialState라고 선언한다.
2. 리듀서를 만들어준다. parameter에 초기 state를 넣어주고, 액션 객체를 넣어준다. 그리고 switch문으로 액션이 발생했을 때의 값을 리턴하도록 작성한다. 어떠한 액션도 발생하지 않았을 때를 대비하여 default도 반환해준다.
(리듀서 앞에 export 키워를 붙여서 선언한 것을 확인할 수 있는데, 그 이유는 아래에서 설명하도록 하겠다.)
🆘 리듀서(reducer)
state에 변화를 일으키는 함수. 리듀서는 parameter를 두 개 받는다. 첫 번째는 현재 state(초기값), 두 번째는 액션 객체를 받는다.
3. combineReducer 생성
Redux 내장함수엔 combineReducer라는 기능이 있다. 단어 그대로 모든 리듀서들을 합치는 기능이다. 지금은 비록 카운터 기능 하나뿐이라 리듀서를 합칠 필요가 없지만, 나중에 프로젝트를 진행하다 보면 여러 가지 리듀서가 생성될 것이고, 이것을 하나하나씩 연결한다는 것은 비효율적이므로 알아두면 도움이 많이 되고 복잡하지 않으니 바로 다뤄보자!!
src/store/modules/index.js
import { combineReducers } from “redux”; import counter from “./counter”; // import한 리듀서 이름을 그대로 사용하는 경우 export default combineReducers({ counter, }); // 리듀서 이름을 지정하는 경우 export default combineReducers({ // 리듀서 이름: import한 리듀서 counterData: counter, });
1. combineReducers와 위에서 export했던 counter 리듀서를 import 해준다.
2. 리듀서를 합쳐주는 방법은 리듀서 이름을 그대로 사용하는 경우, 직접 지정하는 경우 이렇게 2가지가 있다.
4. Counter Component 생성
1, 2, 3 과정을 통해 Redux 파일 구조를 생성해봤다. 그런데 파일을 활용할 곳이 없으니 간단하게 컴포넌트를 만들어 View화면을 만들어주도록 하자.
src/components/Counter.js
import { useDispatch, useSelector } from “react-redux”; import { decrement, increment } from “../store/modules/counter”; export default function Counter() { const dispatch = useDispatch(); // import한 리듀서 이름을 그대로 사용하는 경우 const count = useSelector((state) => state.counter.number); // 리듀서 이름을 지정하는 경우 // const count = useSelector((state) => state.counterData.number); return (
COUNTER
{count}
); }
1. useDispatch 는 리덕스 스토어의 dispatch를 함수에서 사용할 수 있게 해주는 react-redux에서 제공하는 hook이다. 이것을 이용하여 각각의 액션들을 dispatch 해준다.
2. useSelector는 리덕스 스토어의 state를 조회하는 hook이다. 위의 코드를 잠시 살펴보면 state.counter.number에서 counter는 방금 전 생성한 리듀서의 이름을 말한다.
🆘 디스패치(dispatch)
dispatch 함수는 액션 객체를 넘겨줘서 state를 변경할 수 있는 함수다.
5. Component 연결
src/App.js
import logo from “./logo.svg”; import “./App.css”; import Counter from “./components/Counter”; function App() { return (
Study Redux
); } export default App;
1. App.js 파일에 카운터 컴포넌트를 import 해준다.
6. Store 생성
src/index.js
하나의 애플리케이션엔 하나의 스토어가 존재한다. 스토어 안에는 state를 담고 있고, 업데이트될 때마다 다시 실행하게 한다.
import React from “react”; import ReactDOM from “react-dom”; import “./index.css”; import App from “./App”; import { createStore } from “redux”; import { Provider } from “react-redux”; import rootReducer from “./store/modules”; const store = createStore(rootReducer); ReactDOM.render(
, document.getElementById(“root”) ); 1. createStore를 생성하여 위의 과정에서 만든 리듀서를 parameter에 넣어준다. 만들어둔 combineReducer가 있으니 그것을 활용해보자.
2. Provider는 react-redux에서 제공하는 컴포넌트로 리액트 프로젝트에 store를 쉽게 연동할 수 있도록 하는 컴포넌트다. Provider를 불러온 후, props에 아까 선언했던 store를 넣어주자.
# 프로젝트 실행
위의 과정을 모두 진행했으니 이제 프로젝트를 실행시켜서 확인해보자!!
# NPM npm start # YARN yarn start
Success!!
위의 이미지과 같게 나온다면 성공!!!
GitHub 예제 코드
– GitHub에 예제 코드를 공유하였습니다!! 같이 공부하고 공유하는 문화를 만들어 보고 싶습니다!!
– https://github.com/ivory-code/reduxExample.git
반응형
So you have finished reading the 리액트 리덕스 예제 topic article, if you find this article useful, please share it. Thank you very much. See more: React-redux 예제, 리덕스 값 가져 오기, 리액트 리덕스 로그인, 리액트 리덕스 설치, React-redux, 리 액트 액션, React-redux 게시판 예제, 리액트 리덕스 강의