728x90
반응형

react와 redux를 연결하는 방법을 간략하게 알아보고 이때 사용되는 react-reudx와 reducer의 관계를 알아보자

 

* 일단 변수명은 지금 로직과 관련이 없다는 것만 알고 다양한 연결방법과 쓰임새만 알고 가자

 

reuducer는 combineReducers를 활용하여 redux를 생성하게 되고 reducer의 return 값들은 redux의 값으로 활용된다

 

 

 

reducer/index.js

import { combineReducers } from 'redux';

 

const songsReducer = () => {

  return [

    { title: 'No Scrubs', duration: '4:05' },

    { title: 'Macarena', duration: '2:30' },

    { title: 'All Star', duration: '3:15' },

    { title: 'I Want it That Way', duration: '1:45' }

  ];

};

 

  • ===============================================================

const selectedSongReducer = (selectedSong = null, action) => {

  if (action.type === 'SONG_SELECTED') {

    return action.payload;

  }

 

  return selectedSong;

};

 

export default combineReducers({

  songs: songsReducer,

  selectedSong: selectedSongReducer

  

});

 

  • ===============================================================

 

reducerredux를 선언이 끝나면 redux에 값을 치환하기 위해서는 action함수를 선언한다

그리고 사용될 클래스 내에서 react-redux로  mapDispatchToProps를 활용하여

action함수와 reducerDispatch한다 그렇게 되면 action함수의 return 값이 reducer의 매개변수로 치환되어

redux값이 생성된다

 

 

actions/index.js

export const selectSong = song => {

  return {

    type: 'SONG_SELECTED',

    payload: song

  };

};

 

 

  • ===============================================================

redux를 사용하기 위해서는 react-redux 라이브러리를 사용하여 redux와 react를 연결해야 한다

stateownProps를 사용하여 비교 분석하여 값 치환이 가능하다

 

stateaction함수를 실행시켜 reducer와 바인딩된 값을 가지고 있으며 그것을 사용하기 위해서는

mapStateToProps함수를 사용하여 현재 클래스와 connect를 해주어야 한다

ownProps는 부모 클래스에서 상속받아온 Props값을 나타낸다

 

아래의 코드는 action함수가 실행되고 나서 다른 클래스에서 reducerreturn값을 사용할 때

mapStateToProps함수를 현재 클래스와 connect 하는 것만으로 사용할 수 있게 된다

 

mapStateToProps함수에서 user에 값을 치환하여 클래스 내부에서 props로 받아서 사용이 가능하다

 

selectSong mapDispatchToProps함수를 통해 ation함수를 현 클래스의 property에 추가되어

props로 받아서 사용할 수 있다

이때 부모 컴포넌트에게 받아온 props값과 redux state값이 동시 추가되는 것을 확인할 수 있다

 

 

 

 

components/UserHeader.js

import { connect } from 'react-redux';

 

class UserHeader extends React.Component{

  ... 이하생략 

 

소스가 궁금하다면 url 확인하자

https://tantangerine.tistory.com/5?category=379283

 

components/SongList.js] React, react-redux 활용 연습

components/SongList.js import React, { Component } from 'react'; import { connect } from 'react-redux'; import { selectSong } from '../actions'; class SongList extends Component { renderList() { ret..

tantangerine.tistory.com

}

 

const mapStateToProps = (state, ownProps) => {  

  return { userstate.users.find(user => user.id === ownProps.userId) };

};

 

export default connect(mapStateToProps,{ selectSong })(UserHeader);

 

 

  • ===============================================================

Provider App 컴포넌트를 감싸게 되면  App 컴포넌트는 물론 하위 컴포넌트까지

store에 저장된 값을 사용할 수 있다 이때 저장되는 값은 redux combineReducers함수를 사용한 값이 된다

 

 

index.js

import React from 'react';

import ReactDOM from 'react-dom';

import { Provider } from 'react-redux';

import { createStore } from 'redux';

import App from './components/App';

import reducers from './reducers';

 

ReactDOM.render(

  <Provider store={createStore(reducers)}> 

    <App/>

  </Provider>,

  document.querySelector('#root')

);

 

  • ===============================================================

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts

Powered by Tistory, Designed by wallel