Javascript 将承诺与React Redux一起使用
我正试图用一些依赖于API调用的项设置我的Redux状态 这就是我目前所拥有的 Api调用->Javascript 将承诺与React Redux一起使用,javascript,reactjs,redux,react-redux,es6-promise,Javascript,Reactjs,Redux,React Redux,Es6 Promise,我正试图用一些依赖于API调用的项设置我的Redux状态 这就是我目前所拥有的 Api调用-> return new Promise((resolve, reject) => { const _items = []; axios.get(SiteUrl + spQuery).then((response) => { //console.log(response); return response.data.d.results; }
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);
});
});
在我的componentDidMount()中,我尝试了几种方法,包括->
store.dispatch(addListItem(this.updateSharepointList().then((result) => { return result })));
及
这两个调用都返回PromiseValue对象(带有PromiseValue
),但是如果我像//let test=this.updateSharepointList()。那么((结果)=>{console.log(结果)});
我使用console.log(test)
就可以了。我取回了物品的数组
我做错了什么 据我所知,问题在于你向行动创造者传递的是承诺,而不是实际价值 当您拥有项目、API调用完成且承诺得到解决时,应该调用action creator
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)
你能显示addListItem的内容吗?如果我没弄错的话,它应该会返回一个包含该项目的操作?你是说这个<代码>导出常量addListItem=listItem=>({type:ADD\u listItem,负载:listItem})问题实际上不在Redux中,而是它正在发送一个承诺,而不是
PromiseValue
问题是您将一个承诺传递给动作创建者,您应该做的是调用API,并在成功时调用dispatch,将您作为addListItem接收的项目作为paramWorks,很好!谢谢所以这里的主要问题是dispatch()
没有等到它的参数完全解决,这就是为什么我得到了我想的全部承诺?编辑:你能给我举个react redux的例子吗?我今天才开始学习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)