react 事始め 10

◾️store

アプリケーションで扱う状態の変更を担うreducerを元にstoreを作成する。そのstoreがアプリケーション内のすべてのcomponentで使用できるようにするための仕込みを行う。

reduxパッケージから提供されているstoreを作成するための関数であるcreateStoreをインポートする。作成したstoreを全てのcomponentに渡すための機能をもつ、react-reduxが提供している特殊なcomponentのProviderをインポートする。reducerをインポートし、ソースコードの見通しを良くする意味でもcomponentの専用のディレクトリを作成し、App.jsを移動する。

src/index.js

import { createStore } from 'redux'
import { Provider } from 'react-redux'
import reducer from './reducers'
import App from './components/App';

storeを作成し、createStoreの引数にreducerを渡す。 ここで作るstoreは、アプリケーション内部で唯一のものになる。アプリケーション内部のstateはこのstoreに集約される。

const store = createStore(reducer)

ここで作成したstoreが、アプリケーション内のどのcomponentから参照できるようにするために利用するのがProvider。既存のcomponentをProviderでラップしてstoreという属性にstoreを渡す。アプリケーション内部の全階層のcomponentでstoreの利用が可能になる。

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

ここまでの実装

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import './index.css';
import reducer from './reducers'
import App from './components/App';
import * as serviceWorker from './serviceWorker';

const store = createStore(reducer)

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);
serviceWorker.unregister();