プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Redux
  • 【Redux】「Store」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Redux】「Store」について

02.08

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

ストアの作成手順

まずは、「src/store.js」など適当な場所にReduxストアのファイルを作成します。

Reducerを呼び出す。

ReducerはStore内部に存在する概念ですが、storeとは別ファイルに作成することが一般的です。

1
import reducers from './reducers';

createStoreを読み込む

reducersを引数としてcreateStoreを実行することでStoreを作成することが可能です。

1
2
import { createStore } from 'redux';
const store = createStore(reducers);

Storeを外部から呼び出せるようにする。

1
export default store;

Reactからストアを呼び出す。

ここからはReact側の「src/index.js」を編集します。

ProviderにStoreをセットする。

下記のように、React側からStoreの中のデータを使うためにreact-reduxのProviderを使います。

1
import { Provider } from "react-redux";

下記のようにAppをProviderの子要素とします。(これで子要素のコンポーネントからStoreの情報にアクセスできるようになります。)

1
2
3
4
5
6
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

個別のコンポーネントからストアを呼び出す。

例えば、App.jsから呼び出すとします。

connectを追加する。

react-reduxのconnectを使います。

1
import { connect } from "react-redux";

Appをexportしていたのをconnectをexportするようにします。

変更前

1
export default App;

変更後

Appを引数とします。

1
export default connect()(App);

mapStateToPropsと言う関数を追加してconnectの引数に渡す。

mapStateToProps

下記のような関数をApp.js内に用意します。

1
2
3
4
5
const mapStateToProps = state => {
  return {
    test: state.test.value
  }
};

mapStateToPropsの特徴
  • ただ一つのオブジェクトを返す関数
  • stateと言う引数には自動的に現在のStoreの中身が与えられます。
  • stateの中身を個別コンポーネントのpropsに渡してUI表示にデータを使うことが可能です。
  • 上記例で言えば、Storeの「test」によってtestと言うpropsに渡しています。

export文を以下のようにする。

connectの引数に関数「mapStateToProps」を渡すことによって個別コンポーネントがStoreにアクセスできるようになります。

1
export default connect(mapStateToProps)(App);

これでUI側(jsx)から「this.props.test」などでストアの値を取り出すことが可能です。

ReactからReduxのStoreの値に変化を加える。

ActionをDispatchできるようにする必要があります。

Actionを入れた関数を呼び出せるようにする。

「src/action.js」などで宣言したActionCreator(Actionを返してくれる関数)をReactのコンポーネントから呼び出します。

1
import { aMethod, bMethod } from './actions';

this.props.dispatchを使ってActionをDispatchする。

コンポーネント内のみで利用するstate変数をコンストラクタで宣言します。

1
2
3
4
5
6
  constructor() {
    super();
    this.state = {
      input: ""
    };
  }

jsx内

1
2
3
4
5
6
7
8
9
10
  render() {
    const { input } = this.state;
    return (
     <div>
       <input type="text" onChange={e => this.setState({input: e.target.value})}/>
        <button onClick={()=> this.props.dispatch(aMethod(this.state.input))}>
          a
        </button>
      </div>
    )

「this.state.input」が入力欄の内容(onChange={e => this.setState({input: e.target.value})}でセットしている。)をAction(a)に渡し、さらにthis.props.dispatchに渡すことでActionをdispatchしています。これでコンポーネント側からStoreに働きかけることが可能になります。

コードの見通しをよくする。

mapDispatchToPropsと言う関数を作成します。以下の例で出てくる「aMethod」、「bMethod」はActionCreator(Actionを返してくれる関数)のことです。また、引数で渡しているtestはActionを生成する際に使用するpayload(引数)になります。

1
2
3
4
5
6
7
8
9
10
const mapDispatchToProps = dispatch => {
  return {
    onAMethod(test) {
      dispatch(aMethod(test))
    },
    onBMethod(test) {
      dispatch(bMethod(test))
    }
  }
};

次にconnectの第二引数に与えます。

1
export default connect(mapStateToProps, mapDispatchToProps)(App);

こうすることでthis.propsの要素としてDispatchを行うための関数を与えることが可能になります。

修正前

1
<button onClick={()=> this.props.dispatch(aMethod(this.state.input))}>

修正後

このように書き換えることが可能になります。

1
<button onClick={()=> this.props.onAMethod(this.state.input)}>
スポンサーリンク
  • 2021 02.08
  • miyabisan2
  • コメントを書く
  • React, Redux
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 01.24

    【redux】redux-thunk

  2. 2021 06.13

    【React】「Redux Tool Kit」のテスト

  3. 2021 02.11

    【React】「React-Testing-Library」について

  4. 2021 01.24

    【React】「ライフサイクル」や「フック(Hooks)」について

  5. 2021 02.11

    【React】props、「モック」を使ったテスト、React Hooksのテスト

  6. 2021 02.11

    【React】「react-testing-library」の「入力テスト」

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Redux】「Reducer」、「Action」の実…

【React】「material-ui」について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー