관리 메뉴

프론트엔드 정복하기

App.js 분석 | Class 컴포에서 Redux 사용법 본문

React/클론코딩-realworld app

App.js 분석 | Class 컴포에서 Redux 사용법

GROWNFRESH 2020. 10. 20. 10:47

 Connect, mapStateToProps, mapDispatchToProps 함수는 현재 useDispatch 함수로 간단하게 대체해서 사용할 수 있다. 하지만 이 함수들의 기능을 파악해야 useDispatch로 변경시킬 수 있기 때문에 이 3가지 함수와 인자들에 대해서 공부해보자.

thoughtbot.com/blog/using-redux-with-react-hooks : React Hooks와 useDispatch


*Connect( )

: Provider 컴포넌트의 하위 컴포넌트들이 Store에 접근하게 만드는 역할을 한다.

connect(mapStateToProps, mapDispatchToProps)(Provider 하위 Component)

 

1. mapStateToProps

: connect 함수의 1번째 인수

: Store가 업데이트될 때마다 자동으로 호출됨. 이를 원하지 않는다면 null 또는 undefined값을 제공해야 함.

 

≒ Hooks의 useSelector의 개념과 비슷하다.

 

1-1) mapStateToProps의 1번째 인자 : state

  ex) const mapStateToProps = state =>({ todos : state.todos })

 

1-2) mapStateToProps의 2번째 인자 : 우리가 원하는 객체(순수 객체)

  ex) const mapStateToProps = (state, ownProps) =>({ todos : state.todos[ownProps.id] })

 

 

 

store.getstate( ).불라  = store의 불라의 상태값 불러오기 = usestate

 

 

2. mapDispatchToProps

: connect 함수의 2번째 인수

: state 관리를 위해 store에 접근한 Component가 dispatch를 사용할 수 있게 해준다.

 

2-1) mapDispatchToProps의 1번째 인자 : dispatch

  ex) const mapDispatchToProps= dispatch=>{

         return{

            increment : ()=>dispatch({type:'INCREMENT'})

        }

    }

 

 

 store.dispatch( ) = store의 상태 변경하기 = useDispatch

 

dispatch 하기

import toggleTodo from "./actions/toggleTodo"

const TodoApp = () => {
	const { toggleTodo, todo } = this.props;
	return (
    	<div>
        	//mapStateToProps로 반환한 todo에 접근할수있다.
        	{todo}
            //mapDispatchToProps가 반환한 toggleTodo를 사용해
            //button을 눌러 dispatch하게 만들어줄수있다.
            <button onClick={() => toggleTodo()} />
        <div>
    )
}

const mapStateToProps = (state, ownProps) => ({
  todo: state.todos[ownProps.id]
  })
  
const mapDispatchToProps = (dispatch) => {
  toggleTodo: action => dispatch(toggleTodo(action))
  }
  
 /*
 	반드시 connect로 mapStateToProps, mapDispatchToProps를 넘겨주어야
 	mapStateToProps와 mapDispatchToProps가 반환한 객체에 TodoApp컴포넌트가
 	this.props로 접근할수있다.
 */
export default connect(mapStateToProps, mapispatchToProps)(TodoApp);

'React > 클론코딩-realworld app' 카테고리의 다른 글

middleware.js 분석  (0) 2020.10.18
store.js 분석 | redux-logger, devtool  (0) 2020.10.18