在React Redux中使用Promises



我正在尝试用一些依赖于API调用的项来设置我的Redux状态。

这就是我到目前为止所拥有的。

Api呼叫->

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);
});
});

在我的组件DidMount((中,我尝试了一些东西,包括->

store.dispatch(addListItem(this.updateSharepointList().then((result) => { return result })));

store.dispatch(addListItem(this.updateSharepointList()));

这两个调用都返回Promise对象(带有PromiseValue(,但如果我像//let test = this.updateSharepointList().then((result) => { console.log(result) }); 一样执行

我用console.log(test),它很好。我取回了项目数组。

我在这里做错了什么?

据我所知,问题是您将承诺传递给了操作创建者,而不是实际值。

当您拥有项时,当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)

相关内容

  • 没有找到相关文章

最新更新