在React Redux中使用Promises

时间:2018-12-05 13:19:13

标签: javascript reactjs redux react-redux es6-promise

我正在尝试通过一些依赖于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) }); 很好。我拿回物品的阵列。

我在这里做错了什么?

1 个答案:

答案 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)