Back To Articles

React Redux with Class-based Components

🧑🏻‍💻 海豹人 Sealman 📅 March 4, 2022

Article Image

本文介紹 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)

References