r e a c t

redux / Provider, useSelector, dispatch

hee.hee 2022. 7. 7. 11:36

리덕스 키워드


  1. 액션 (Action)
    상태에 변화가 필요할 때 발생시킴 (객체하나로 표현)
    type을 필수로 그외의 값들은 개발자 마음대로 생성
  2. 액션 생성함수 (Action Creator)
    컴포넌트에서 더욱 쉽게 액션을 발생시키기 위함
    필수 아님
  3. 리듀서 (Reducer)
    변화를 일으키는 함수
    현재의 상태와 액션을 참조하여 새로운 상태를 반환
  4. 스토어 (Store)
    한 애플리케이션당 하나의 스토어
    현재의 앱 상태와, 리듀서, 내장함수 포함
  5. 디스패치 (dispatch)
    스토어의 내장함수
    액션을 발생 시키는 것
  6. 구독 (subscribe)
    스토어의 내장함수
    subscribe 함수에 특정 함수를 전달해주면, 액션이 디스패치 되었을 때 마다 전달해준 함수가 호출
    (리액트에서는 connect 함수 또는 useSelector Hook 을 사용)

아래 링크의 sshusshu 님 댓글

https://react.vlpt.us/redux/01-keywords.html

 

 

 

 

 

 

 

Provider


바뀌는 state들을 어떤 컴포넌트에 제공할 것인가에 대한 가장 바깥쪽 울타리를 정의.

import React from 'react';
import ReactDOM from 'react-dom';
import App from './containers/App';
import './index.css';

// Redux 관련 불러오기
import { createStore } from 'redux'
import reducers from './reducers';
import { Provider } from 'react-redux';

// 스토어 생성
const store = createStore(reducers);

ReactDOM.render(
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('root')
);

 

 

 

 

useSelector


store에 저장되어 있는 state를 사용하기 위해 쓴다.

state를 사용하고자 하는 컴포넌트에서 useSelector로 state를 불러와서 사용.

state가 바뀌면 useSelector로 등록해둔 컴포넌트들만 재렌더링 된다. 퍼포먼스적으로도 유용하다.

 

useSelector의 최적화

https://velog.io/@seongkyun/useSelector-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

useSelector 제대로 사용하기

만약 아래 두 코드의 차이점을 답 할 수 있다면 제대로 useSelector를 사용하고 있는 것이다.코드1코드2코드 1과 2의 차이는 useSelector를 한 번 사용했지 여러번 사용했는지의 차이가 있다.위 코드를

velog.io

 

 

 

 

 

 

dispatch


스토어의 내장함수. 만들어둔 액션을, 필요한 컴포넌트 안에서 디스패치에 파라미터로 전달해 실행시킨다.

dispatch(action) 이렇게. 그럼 store가 리듀서를 실행시켜 액션으로 작업을 하고, 새로운 상태를 만든다.

즉, dispatch는 리듀서에 action을 전달하고, reducer는 새로운 상태를 만든다.

 

 

 

 

 

 

subscribe

store의 내장함수.

함수를 파라미터로 받아온다. 액션이 디스패치 되었을 때 마다 subscribr에 전달한 함수가 호출된다.

subscribe를 쓰기보다는, 보통 react-redux 라이브러리에서 제공하는 connect 함수 또는 useSelect Hook으로 대신한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://react.vlpt.us/redux/01-keywords.html

https://redux.vlpt.us/1-8-provider.html

https://www.youtube.com/watch?v=yjuwpf7VH74&t=6s