【发布时间】:2016-05-18 11:06:55
【问题描述】:
假设我已经编写了自己的reducer counter 和connect() 创建的相应组件<Counter />。
然后我创建一个store 来保存counter 的数据并在<Provider /> 中渲染<Counter />,如下所示:
const store = createStore(counter);
render(
<Provider store={store}>
<Counter />
</Provider>,
document.getElementById('container')
);
到目前为止,一切正常。
但是当我认为我可以轻松地重用我的 reducer counter 和组件 <Counter /> 并尝试在一页中渲染多个计数器时,我发现自己很挣扎......
我想到的第一个想法是创建多个stores 和<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 的“一个应用程序一个商店”原则相冲突。
后来我尝试了许多不同的方法来实现这一点,只用了一个store,同时尽可能多地重用我创建的东西(目前,reducer counter 和组件<Counter />)。
我得出的最后一个(也是可行的)方法是写一个新的reducermultiCounters和一个新的连接组件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')
);
这种方法有效,符合“一个商店”的原则,但我必须再写一堆代码来包装我想要重用的组件。更不用说真正被重用的只是 React 组件 <Counter />,单个计数器的 reducer counter 在这种情况下变得毫无用处......
在 ReactRedux 中是否有更聪明的方法来重用组件(也许还有 reducer?)?
谢谢!
【问题讨论】:
标签: reactjs redux react-redux