src
├─ components
│ └─ Counter.js
│ store
│ └─ index.js
├─ App.js
└─ index.js
npm install redux react-redux
.counter {
margin: 5rem auto;
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2);
width: 40rem;
border-radius: 8px;
padding: 1rem;
text-align: center;
background-color: #f4f0fa;
}
.counter h1 {
text-transform: uppercase;
color: #575757;
margin: 0;
font-size: 1rem;
}
.value {
font-size: 2rem;
color: #3c0080;
margin: 2rem 0;
font-weight: bold;
}
.counter button {
margin: 1rem;
}
connect
import { Component } from 'react'
import { connect } from 'react-redux'
import classes from './Counter.module.css'
class Counter extends Component {
incrementHandler() { // 4
this.props.increment()
}
decrementHandler() { // 4
this.props.decrement()
}
toggleCounterHandler() {}
render() {
return (
<main className={classes.counter}>
<h1>Redux Counter</h1>
<div className={classes.value}>{this.props.counter}</div>
<button onClick={this.incrementHandler.bind(this)}>Increment</button> // 5
<button onClick={this.decrementHandler.bind(this)}>Decrement</button> // 5
<button onClick={this.toggleCounterHandler}>Toggle Counter</button>
</main>
)
}
}
// 1
// mapStateToProps 는 리덕스 스토어의 상태를 조회해서 어떤 것들을 props 로 넣어줄지 정의합니다.
// 현재 리덕스 상태를 인자로 받아옵니다.
const mapStateToProps = state => {
return {
counter: state.counter,
}
}
// 2
// mapDispatchToProps 는 액션을 디스패치하는 함수를 만들어서 props로 넣어줍니다.
// dispatch 를 인자로 받아옵니다.
const mapDispatchToProps = dispatch => {
return {
increment: () => dispatch({ type: 'increment' }),
decrement: () => dispatch({ type: 'decrement' }),
}
}
// 3
// connect 함수에는 mapStateToProps, mapDispatchToProps 를 인자로 넣어줍니다.
export default connect(mapStateToProps, mapDispatchToProps)(Counter)
/* 위 코드는 다음과 동일합니다.
const enhance = connect(mapStateToProps, mapDispatchToProps);
export defualt enhance(Counter);
*/
npm install @reduxjs/toolkit
const { increment, decrement, increase, toggleCounter } = counterSlice.reducer
const { reducer } = counterSlice
src
├─ components
│ ├─ Auth.js
│ ├─ Auth.module.css
│ ├─ Counter.js
│ ├─ Counter.module.css
│ ├─ Header.js
│ ├─ Header.module.css
│ ├─ UserProfile.js
│ └─ UserProfile.module.css
│
├─ store
│ └─index.js
├─ App.js
├─ index.js
└─ App.js
역시 스승님..
언젠가 저도 이해하겠습니다