自分のレデューサーcounter
と対応するコンポーネント<Counter />
をconnect()で作成したとします。ReactReduxの構造にコンポーネントとレデューサーを再利用するためのスマートなアプローチはありますか?
私は、このように、counter
のデータを保持し、<Provider />
内<Counter />
をレンダリングするstore
を作成します。
const store = createStore(counter);
render(
<Provider store={store}>
<Counter />
</Provider>,
document.getElementById('container')
);
今まで、すべてが右になります。
しかし、私は、私は簡単に私の減速counter
とコンポーネント<Counter />
を再利用して1つのページに複数のカウンタをレンダリングしようとしたことを考えたとき、私は自分自身が苦労した...
最初に考えたのは私の心に来作成することです。複数store
sおよび<Provider />
Sは次のように、これを実現するには:
const store1 = createStore(counter);
const store2 = createStore(counter);
render(
<div>
<Provider store={store1}>
<Counter />
</Provider>
<Provider store={store2}>
<Counter />
</Provider>
</div>,
document.getElementById('container')
);
このアプローチは動作しますが、Reduxのの「1店舗あたりのアプリケーション」の原則と競合しています。
後、私は同じくらい私は(今のところ、減速counter
およびコンポーネント<Counter />
)することができますように私が作成したものを再利用し、同時に一つだけstore
でこれを達成するために異なるアプローチの多くを試してみました。
私が出てきた、最終的な(そして実行可能な)アプローチは、次にそれを使用して、新しい減速multiCounters
と新しい連結成分MultiCounters
を書くことである。このアプローチは動作します
// new reducer
const multiCounters = (state, action) => {
...
};
// new connected component
const Counters = ({...}) => {
return (
<div>
<Counter {...} />
<Counter {...} />
...
</div>
);
};
const MultiCounters = connect(...)(Counters);
// render
const store = createStore(multiCounters);
render(
<Provider store={store}>
<MultiCounters />
</Provider>,
document.getElementById('container')
);
をし、「1店舗」の原則を満たしますしかし、再利用したいコンポーネントをラップするために、別のコードを書く必要があります。いいえ
は、コンポーネントを再利用するために任意のよりスマートなアプローチがあり...本当に再利用されていますがコンポーネント
<Counter />
は、単一のカウンタ用減速counter
は、このような状況では無用となりリアクトだけでは言及しないように(また、レデューサーは多分、?)ReactReduxに?
ありがとうございました!