redux

Action

reducer์—์„œ ์ ˆ๋Œ€ ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ์ผ

  • ์ธ์ˆ˜๋“ค์„ ๋ณ€๊ฒฝ(mutate)ํ•˜๊ธฐ;

  • API ํ˜ธ์ถœ์ด๋‚˜ ๋ผ์šฐํŒ… ์ „ํ™˜๊ฐ™์€ ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ์ผ์œผํ‚ค๊ธฐ;

  • Date.now()๋‚˜ Math.random() ๊ฐ™์ด ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ.

Container

mapStateToProps

const mapStateToProps = state => {
  return {
    todos: getVisibleTodos(state.todos, state.visibilityFilter)
  }
}

mapStateToProps๋ผ ๋ถˆ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์—๋Š” ํ˜„์žฌ Redux ์Šคํ† ์–ด์˜ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ˜•ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์†์„ฑ์„ ํ†ตํ•ด presentational ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜๊ฒจ์ค„ ์ง€๋ฅผ ์„œ์ˆ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

mapDispatchToProps

const mapDispatchToProps = dispatch => {
  return {
    onTodoClick: id => {
      dispatch(toggleTodo(id))
    }
  }
}

mapDispatchToProps() ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ด ํ•จ์ˆ˜๋Š” dispatch() ๋ฉ”์†Œ๋“œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๊ฐ€ ์ฝœ๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์†์„ฑ๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋ฉด, presentational ์ปดํฌ๋„ŒํŠธ์— ์ด ์†์„ฑ๋“ค์ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.

connect

import { connect } from 'react-redux';

const VisibleTodoList = connect(
  mapStateToProps,
  mapDispatchToProps
)(TodoList)

export default VisibleTodoList
export default connect(
  mapStateToProps,
  mapDispatchToProps
)(App)

App์ปดํฌ๋„ŒํŠธ๋ฅผ connect๋ฅผ ๊ฐ์‹ผ๊ฒƒ์ด๋‹ค. ๋ฆฌ๋•์Šค ์„ธ์ƒ๊ณผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š”๊ฒƒ์ด๋‹ค. App์€ ๋˜๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋œ๊ฒƒ์ด๋‹ค.

jsonํŒŒ์ผ์€

reject ๋Š” ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์‹คํŒจํ•˜๋„๋ก

์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๊ฒŒ ๋ฆฌ์กธ๋ธŒ ๋ฆฌ์ ํŠธ

์บ์น˜๋Š” ์•ˆ์ชฝ๊ตฌ๋ฌธ..

connect ํ•ด๋†“์€ ์• ๋“ค์€ ๋ฆฌ๋•์Šค์˜ state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด (๋ฆฌ๋“€์„œ์—์„œ ๋ฆฌํ„ด์„ ํ•ด์ค€๊ฒƒ์ด๋‹ค.) ๋ฆฌ๋•์Šค๋ผ๋Š” ์• ๊ฐ€ ์ž๋™์œผ๋กœ ์Šคํ† ์–ด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค. ์Šคํ† ์–ด๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด ์ปค๋„ฅํŠธ ํ•ด๋†“์€ ์• ๋“ค์€ ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋œ๋‹ค. ํ•˜์œ„์— ์žˆ๋Š” ๋ชจ๋“ ์• ๋“ค๋„ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋œ๋‹ค.

connect๋Š” hight oder compopnenet

mapStateToProps,
mapDispatchToProps

๋ฆฌ๋•์Šค์„ธ์ƒ์— state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์„ ๋•Œ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก

props ๋กœ ๋‚ด๋ ค๊ฐ€๋„๋ก ํ•œ๋‹ค.

Dispatch ํ•˜๋„๋ก ํ•œ๋‹ค.

Provider

redux์—์„œ reducer๊ฐ€ ํ˜ธ์ถœ์ด ๋œ๋‹ค. reducer๋Š” ๊ธฐ์กด์˜ state์ž ๋ฐ์ดํ„ฐ ์ƒํƒœ / ํ˜„์žฌ ๋ฐœ์ƒํ•œ action์„ ๋ฐ›๋Š”๋‹ค. ๊ทธ ๋‘๊ฐœ๋ฅผ ๋ฐ›์•„์„œ ์ƒˆ๋กญ๊ฒŒ state๊ฐ€ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •๋˜๋ฉด ๋˜๋Š”์ง€ return์„ ํ•ด์ค€๋‹ค. ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์„œ props๋กœ ๋ฟŒ๋ ค์ง„๋‹ค.

reducer์—์„œ returnํ•ด์ฃผ๋Š” state๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š”๊ฒŒ provider์ด๋‹ค.

combineReducers ๋Š” reducer๋ฅผ ํ•ฉ์นœ๋‹ค.

state์˜ ๋ชจ์–‘์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค/

reducer

์ˆœ์ˆ˜ํ•จ์ˆ˜์ด๋‹ค.

const todos = (state = [], action)

reducer๋ฅผ ๋”ฐ๋กœ ํ˜ธ์ถœํ•ด ์ฃผ์ง„ ์•Š๋Š”๋‹ค.

dispatch

connect๋ฅผ ํ•จ์œผ๋กœ ์ž๋™์œผ๋กœ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ ๋ญ”๊ฐ€ ์•ก์…˜์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋งํ•ด์ค€๋‹ค.-> ๋ฆฌ๋•์Šค ์„ธ์ƒ์— ์•Œ๋ ค์ฃผ๊ณ  ์‚ฌ์ดํด์„ ๋Œ๋ฆฐ๋‹ค.

์ด ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ •๋ณด๋ฅผ ์ €์žฅํ•ด์•ผํ•˜๋Š”์ง€ ์ƒ๊ฐ์„ ํ•ด์„œ dispatch์— ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. -> ๋ฆฌ๋“€์„œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.(์•Œ์•„์„œ ํ˜ธ์ถœํ•จ )

action type

reducer์—์„œ ์ดˆ๊ธฐ์Šคํ…Œ์ดํŠธ๋ฅผ ์ •์˜ํ•ด์ค€๋‹ค.

Last updated

Was this helpful?