我正在尝试通过一些依赖于API调用的项来设置Redux状态。
这是我到目前为止所拥有的。
Api通话->
C
在我的componentDidMount()中,我尝试了几种方法,包括->
return new Promise((resolve, reject) => {
const _items = [];
axios.get(SiteUrl + spQuery).then((response) => {
//console.log(response);
return response.data.d.results;
}).then((listItemsData) => {
......
_items.push({...});
return _items;
}).then((items) => {
resolve(items);
});
});
和
store.dispatch(addListItem(this.updateSharepointList().then((result) => { return result })));
这两个调用都返回Promise对象(带有 store.dispatch(addListItem(this.updateSharepointList()));
),但如果我这样做,则类似于PromiseValue
我使用//let test = this.updateSharepointList().then((result) => { console.log(result) });
很好。我拿回物品的阵列。
我在这里做错了什么?
答案 0 :(得分:2)
据我了解,问题在于您正在向动作创建者传递承诺,而不是实际价值。
当您拥有商品时,API调用完成且承诺已解决时,应调用操作创建者。
this.updateSharepointList().then((result) => {
store.dispatch(addListItem(result))
})
如果您使用react,则可以签出“ react-redux”,您可以签出连接动作创建者并将其绑定到道具。这是一种更优雅,更易于使用的方法。
使用react-redux的示例:
class MyComponent extends Component {
doSomething() {
this.updateSharepointList().then((result) => {
this.props.addListItem(result);
})
}
}
const mapDipatchToProps = (dispatch) => ({
addListItem: (listItem) => dispatch(addListItem(listItem))
)}
const mapStateToProps = (state) => ({}) // used for getting state from store and mapping it to props
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent)