今回はredux
におけるcontainer
について。
container
の役割は、明示的にStoreの内容を変更するために行う作業。
ただし、今現在ではHooks
を使う方が圧倒的に記述量、ファイル数が減るためHooks
を使う方がおススメらしい。
まぁいつか使う時が来たときに備忘録も兼ねて書いていきます。
import { connect } from 'react-redux'
import { compose } from 'redux'
import Class from 'Class.jsx'
まずは、import { connect } from 'react-redux'
とimport { compose } from 'redux'
が必要になる。
また、対象とするクラスコンポーネントが必要になる。
今回は例としてimport Class from 'Class.jsx'
としている。
次にmapStateTpProps
とmapDispatchToProps
の2つが必要となる。
これら2つはuseState
とuseDispatch
と同じ役割を果たす。
import { connect } from 'react-redux'
import { compose } from 'redux'
import Class from 'Class.jsx'
const mapStateTpProps = state => {
return {
users: state.users
}
}
const mapDispatchToProps = dispatch => {
return {
actions: {
signIn() {
dispatch(アクション)
}
}
}
}
最後にcompose
とconnect
を使ってこれらのアクションが行えるようにする。
import { connect } from 'react-redux'
import { compose } from 'redux'
import Class from 'Class.jsx'
const mapStateTpProps = state => {
return {
users: state.users
}
}
const mapDispatchToProps = dispatch => {
return {
actions: {
signIn() {
dispatch(アクション)
}
}
}
}
export default compose(
connect(
mapStateTpProps,
mapDispatchToProps
)
)(Class)
compose
の中でconnect
を使い、connect
の引数にはmapStateTpProps
とmapDispatchToProps
を渡す。最後に対象のクラスコンポーネントを渡す。
これで準備はOK。
後は対象のクラスコンポーネントを以下のようにする。
import React, {Component} from 'react'
export default class Class extends Component {
render() {
console.log(this.props.users)
console.log(this.props.actions)
}
}
Component
をインポートし、this.props
でコンテナーで定義したものを参照できる。
感想としてはまぁ使う場面は少ないのかなと思います。
やはりクラスコンポーネントに変えてさらに継承も行わなきゃいけないし、継承を行うために色々記述しなければいけないので当分はHooks
を使っていきます。
アウトプットは大事!