本文介紹 React Redux 於 Class-based Components 的使用。
The Connect Function
這個 connect()
是一個 HOC,會接收一個元件。
它的寫法可以解讀為 connect()
會回傳一個 Function,接著把 Counter 元件作為參數傳進去。
export default connect()(Counter)
除了接收元件,connect()
本身也會接受兩個 Function 作為參數:
- 第一個參數是將 Redux State map to Props,做的事情其實就跟
useSelector
一樣 - 第二個參數則類似
useDispatch
,作用是將dispatch
函式儲存為 Props
import { Component } from 'react'
import { connect } from 'react-redux'
class Counter extends Component {
incrementHandler = () => {
this.props.increment()
}
decrementHandler = () => {
this.props.decrement()
}
render() {
return (
<main>
<div>{this.props.counter}</div>
<div>
<button onClick={this.incrementHandler.bind(this)}>Increment</button>
<button onClick={this.decrementHandler.bind(this)}>Decrement</button>
</div>
</main>
)
}
}
const mapStateToProps = state => {
return {
counter: state.counter,
}
}
const mapDispatchToProps = dispatch => {
return {
increment: () => dispatch({ type: 'INCREMENT' }),
decrement: () => dispatch({ type: 'DECREMENT' }),
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Counter)