Eug*_*ene 49 javascript reactjs redux react-redux
我开始学习React/Redux并偶然发现了一些可能是一个非常基本的问题.以下是我的应用程序的片段,为简单起见删除了一些代码.
我的状态由一系列默认为空的站点描述.LOAD_SITES
每当用户分页到不同的页面时,后来的reducer将有动作加载不同的站点集,但是现在它什么都不做.React从渲染开始PublishedSitesPage
,然后渲染然后渲染PublishedSitesBox
,然后循环数据并渲染单个网站.
我想要做的是让它使用默认的空数组渲染所有内容,同时启动"从服务器加载站点"的承诺,一旦它结算,就会调度LOAD_SITES
操作.拨打这个电话的最佳方式是什么?我在考虑PublishedSitesBox
或者也许是构造函数componentDidMount
.但不确定这是否可行 - 我担心的是,我会以这种方式创建一个无限循环,以保持重新渲染.我想我可以通过在"haveRequestedInitialData"的行中设置一些其他状态参数来以某种方式阻止这种无限循环.我的另一个想法是在做完之后立即做出这个承诺ReactDOM.render()
.什么是最好,最干净的方法?
export default function sites(state = [], action) {
switch (action.type) {
default:
return state;
}
}
...
const publishedSitesPageReducer = combineReducers({
sites
});
ReactDOM.render(
<Provider store={createStore(publishedSitesPageReducer)}>
<PublishedSitesPage />
</Provider>,
this.$view.find('.js-published-sites-result-target')[0]
);
...
export default function PublishedSitesPage() {
return (
<PublishedSitesBox/>
);
}
...
function mapStateToProps(state) {
return { sites: state.sites };
}
const PublishedSitesBox = connect(mapStateToProps)(({sites}) => {
// render sites
});
Run Code Online (Sandbox Code Playgroud)
S M*_*han 41
这个数据加载逻辑根本没有理由触及你的React组件.你想要的是返回承诺向你的reducer发送一个动作,它对商店进行适当的改变,然后使React组件适当地重新渲染.
(在调用ReactDOM.render之前或之后是否启动异步调用并不重要;承诺将以任何方式工作)
像这样的东西:
var store = createStore(publishedSitesPageReducer);
someAsyncCall().then(function(response) {
store.dispatch(someActionCreator(response));
});
ReactDOM.render(
<Provider store={store}>
<PublishedSitesPage />
</Provider>,
this.$view.find('.js-published-sites-result-target')[0]
);
Run Code Online (Sandbox Code Playgroud)
您的React组件是您商店的消费者,但没有规定他们需要成为您商店的唯一消费者.
归档时间: |
|
查看次数: |
20051 次 |
最近记录: |