【发布时间】:2016-05-03 05:58:24
【问题描述】:
我有几条路线使用相同的控制器:
<Route component={Search} path='/accommodation(/:state)(/:region)(/:area)' />
当路由改变时,我从组件内部调用 api 函数:
componentWillReceiveProps = (nextProps) => {
if (this.props.params != nextProps.params) {
loadSearch(nextProps.params);
}
}
这是一个动作如下:
export function loadSearch (params) {
return (dispatch) => {
return dispatch(
loadDestination(params)
).then(() => {
return dispatch(
loadProperties(params)
);
});
};
}
加载:
export const DESTINATION_REQUEST = 'DESTINATION_REQUEST';
export const DESTINATION_SUCCESS = 'DESTINATION_SUCCESS';
export const DESTINATION_FAILURE = 'DESTINATION_FAILURE';
export function loadDestination (params) {
const state = params.state ? `/${params.state}` : '';
const region = params.region ? `/${params.region}` : '';
const area = params.area ? `/${params.area}` : '';
return (dispatch) => {
return api('location', {url: `/accommodation${state}${region}${area}`}).then((response) => {
const destination = formatDestinationData(response);
dispatch({
type: DESTINATION_SUCCESS,
destination
});
});
};
}
export const PROPERTIES_REQUEST = 'PROPERTIES_REQUEST';
export const PROPERTIES_SUCCESS = 'PROPERTIES_SUCCESS';
export const PROPERTIES_FAILURE = 'PROPERTIES_FAILURE';
export function loadProperties (params, query, rows = 24) {
return (dispatch, getState) => {
const locationId = getState().destination.id || 99996;
return api('search', {locationId, rows}).then((response) => {
const properties = response.results.map(formatPropertiesData);
dispatch({
type: PROPERTIES_SUCCESS,
properties
});
});
};
}
在初始页面加载时,这可以工作并从 api 返回数据并呈现内容。但是在更改路线时,loadSearch 函数会被触发,但dispatch(返回实际数据)不会。
【问题讨论】:
-
请提供
loadDestination和loadProperties的代码。 -
@bhargavponnapalli - 添加了这些功能。通过将
console.log添加到其中任何一个中,我可以看到初始页面加载,但不会在路由更改时再次触发
标签: javascript reactjs redux react-redux