[React] Redux Basic
용어
Action
애플리케이션에서 일어나는 이벤트를 설명
const addTodoAction = {
type: 'todos/todoAdded',
payload: 'Buy milk'
}
type
: 작업을 설명하는 문자열payload
: 작업에 대한 추가적인 데이터
Action Creators
생성하고 액션 객체를 반환
const addTodo = text => {
return {
type: 'todos/todoAdded',
payload: text
}
}
Reducers
state
와 action
을 파라미터로 입력 받아 새로운 상태를 반환
const initialState = { value: 0 }
function counterReducer(state = initialState, action) {
// Check to see if the reducer cares about this action
if (action.type === 'counter/increment') {
// If so, make a copy of `state`
return {
...state,
// and update the copy with the new value
value: state.value + 1
}
}
// otherwise return the existing state unchanged
return state
}
규칙
state
와action
을 기반으로 새 상태 값을 계산- 기존의
state
값을 수정하지 않고, 복사 된 값을 변경하여 값을 업데이트 - 동일한 입력 => 동일한 출력
Store
컴포넌트 외부에 있는 상태 저장소로 감속기를 전달하며 생성
import { configureStore } from '@reduxjs/toolkit'
const store = configureStore({ reducer: counterReducer })
console.log(store.getState())
// {value: 0}
getState
: 현재 상태 값을 반환하는 메소드
Dispatch
store의 내장함수 중 하나로, 액션을 발생시키는 역할
store.dispatch({ type: 'counter/increment' })
console.log(store.getState())
// {value: 1}
Selectors
store
의 state
값에서 특정 데이터만 추출하는 함수
구체적인 값을 선택하여 데이터를 갱신할 때 불필요하게 리렌더링하는 것을 방지
// 1
const selectCounterValue = state => state.value
const currentValue = selectCounterValue(store.getState())
// 2
import { useSelector } from "react-redux";
const name = useSelector((state) => state.User.name);
Process
Initial Setup
Redux Store
가reducer function
을 통해 생성store
에서reducer
를 호출하고 반환 값을 초기 상태로 저장- UI가 처음 렌더링 될 때 컴포넌트들은
redux store
의 현재 상태에 엑세스하고 해당 데이터들을 사용해 렌더링할 항목을 결정
Updates
- 사용자에 의해서 이벤트 발생
- 코드에서
redux store
로action
을dispatch
store
는 이전state
와 현재action
으로reducer function
을 실행하여 반환 값을 새state
에 저장store
는 UI에 업데이트 알림store
의 데이터가 필요한 각 UI 컴포넌트는 필요한state
가 업데이트 되었는지 확인- 데이터가 변경된 각 컴포넌트는 새 데이터로 강제로 다시 렌더링하여 화면에 내용 업데이트
Example
const { createStore } = require('redux');
// init state
const initState = {
name: 'Ogu',
subscribers: 5
}
// action creator
const updateSubscriber = (num) => {
return {
type: 'UPDATE_SUBSCRIBER',
payload: {
num
}
}
}
// reducer
const reducer = (prevState, action) => {
switch (action.type) {
case 'UPDATE_SUBSCRIBER':
return {
...prevState,
subscribers: action.payload.num
}
default:
return prevState
}
}
// store
const store = createStore(reducer, initState)
// dispatch
console.log(store.getState()); // { name: 'Ogu', subscribers: 5 }
store.dispatch(updateSubscriber(8))
console.log(store.getState()); // { name: 'Ogu', subscribers: 8 }
store.dispatch(updateSubscriber(10))
console.log(store.getState()); // { name: 'Ogu', subscribers: 10 }
출처 : Redux Overview and Concepts(https://ko.redux.js.org/tutorials/essentials/part-1-overview-concepts/)
Author And Source
이 문제에 관하여([React] Redux Basic), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@idhyo0o/React-Redux-Basic저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)