스토어 -> dispatch -> 컴포넌트 -> 액션 -> 리듀서 -> 스토어
이 순으로 변경한다.
reducer 는 현재 상태와 액션 객체를 파라미터로 받아와서 새로운 상태를 반환해주는 함수
특정 함수 또는 값을 props로 받아와서 사용하고 싶은 경우에 사용
redux store안에 있는 상태를 props로 넣어줄 수도 있고,
액션을 디스패치하는 함수를 props로 넣어줄 수도 있다.
connect 함수는 리액트 앱의 하위 컴포넌트에서 redux store를 접근하는 것을 가능하게 해주는 역할을 한다. 이 함수를 이용해서 컴포넌트 단에서 redux store에 접근하고 액션을 호출 할 수 있게 된다.
하위 컴포넌트 단에서는 Provider에서 제공하는 store 함수를 connect 함수를 통해서 받아온다.
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import {createStore} from 'redux';
import {Provider} from 'react-redux'
import reducers from './reducers';
const store = createStore(reducers);
const listener = ()=> {
ReactDOM.render(
<Provider store={store}>
<App indexProp="react"/>
</Provider>,
document.getElementById('root')
);
};
store.subscribe(listener);
listener();
provider로 store을 제공하여,
하위 컴포넌트인 App에서 store에 접근하고 액션을 호출 할 수 있게 한다.
import React from 'react';
import { connect } from 'react-redux';
import BlogDetail from './BlogDetail';
class BlogMain extends React.Component {
render() {
console.log(this.props.text)
console.log(this.props.number)
return (
<div>
<p>BlogMain component</p>
<BlogDetail />
</div>
)
};
};
const mapStateToProps = (state) => { //이 함수가 connect로 이어지잖아??
//그 뜻은 mapStateToProps 함수에서 return되는 값은
//BlogMain 컴포넌트에서 props로 쓸 수 있다는 것이다!!!!!
return {
text: state.text,
number: state.number
}
};
export default connect(mapStateToProps)(BlogMain);
보통 connect 함수를 쓸 때는
connect(mapStateToProps, mapDispatchToProps)
이렇게 사용한다.
mapStateToProps
는 컴포넌트에 props로 넣어줄 리덕스 스토어의 상태에 관련된 함수이고
(스토어에서 가져옴)mapDispatchToProps
는 컴포넌트에 props로 넣어줄 액션을 디스패치 함수에 관련된 함수
(dispatch로 action을 객체로 전달하여, dispatch를 통해 state를 업데이트)
(액션에서 가져옴)
component에서 redux에서 관리하고 있는 state에 접근하기 위해
dipatch로 action을 객체로 전달
dispatch를 통해 state를 업데이트 할수 있습니다
그리고 store가 변경이 되면 dispatch 가 store의 subscribe메소드를 통해
변경된 state 값으로 다시 render를 해주게 됩니다.
벨로퍼트 블로그
Redux 작동 원리
react redux 정리
도서 : 초보자를 위한 리액트 200제(이정열, 정보문화사)