【发布时间】:2018-01-29 12:45:14
【问题描述】:
我正在使用 thunk 中间件,并且我有两个异步操作创建者,如下所示。
export const fetchObject = () => {
return dispatch => {
let action = fetchObjectRequest();
dispatch(action);
let url = "URL1";
let promise = axios.get(url)
.then(response => dispatch(fetchObjectSuccess(response.data)));
return handlingErrorsPromise(promise,
error => {
console.error(JSON.stringify(error));
dispatch(errorOccurred(action, error))
}
);
}
};
假设我有 Object1 和 Object 2 端点,但问题是几乎所有组件都需要 Object1,我必须以某种方式将所有其他对象与来自 Object1 的数据合并。
例如:Object2 包含人员 ID,我必须从 Object1 中附加他们的姓名。
目前我正在将我的组件属性映射到这两个对象,并且我在渲染中使用 if 语句检查是否获取了所有对象。像这样:
class Peoples extends Component {
componentWillMount(){
this.props.fetchObject1();
this.props.fetchObject2();
}
render() {
let peoples = this.mergeObjects();
//rendering
}
mergeObjects = () => {
let isFetching = this.props.object1.isFetching ||
this.props.object2.isFetching;
if (isFetching) {
return {
isFetching,
json: []
};
}
let mergedJson = {...};
return {
isFetching,
json: mergedJson
};
};
}
const mapDispatchToProps = dispatch => {
return {
fetchObject1: () => dispatch(fetchObject1()),
fetchObject2: () => dispatch(fetchObject2())
}
};
const mapStateToProps = state => {
return {
object1: state.object1,
object2: state.object2
};
};
export default Peoples = connect(mapStateToProps, mapDispatchToProps)(Peoples);
有没有更优雅的方式将我的商店中的一个异步对象与其他对象合并?
【问题讨论】:
标签: reactjs redux react-redux redux-thunk