【发布时间】:2016-08-06 19:56:49
【问题描述】:
我正在学习 react/redux,并且有一个包含两个主要状态的应用程序:
- 一组项目
- 包含用户为这些项目指定的过滤器的对象
我有三个函数/操作,createFilter、updateFilter 和 deleteFilter,它们可以修改 #2 的状态。我有一个动作filterItems,它根据#2 的状态修改#1。因此,每当 #2 发生变化时,都需要调度此操作。
这是我正在使用的组件:
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import { createFilter } from '../actions/actions'
import { updateFilter } from '../actions/actions'
import { deleteFilter } from '../actions/actions'
import { filterItems } from '../actions/actions'
class ItemList extends Component {
createFilter(input) {
this.props.createFilter(input)
this.props.filterItems()
}
updateFilter(input) {
this.props.updateFilter(input)
this.props.filterItems()
}
deleteFilter() {
this.props.deleteFilter()
this.props.filterItems()
}
...
// Render method
...
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ createFilter, updateFilter, deleteFilter, filterItems }, dispatch)
}
function mapStateToProps({ itemList }) {
return { itemList }
}
export default connect(mapStateToProps, mapDispatchToProps)(ItemList)
我发现,当发送过滤器方法之一时,在调用filterItems() 时,存储(状态#2)尚未更新。
所以我需要异步执行过滤功能,一旦更新存储调用filterItems。
我正在努力解决如何使用react-thunk 做到这一点。如果第一个函数是 ajax 承诺,我会使用 .then():
export function updateFilterAndEvaluate(input) {
return (dispatch, getState) => {
updateFilter(input).then(dispatch(filterItems(getState().filters)))
}
}
但这些只是函数,并没有 .then() 方法。我正在试图弄清楚我对这个实施的最佳行动方案是什么。我可以将 Redux 操作包装在一个 Promise 中吗?我在滥用 Thunk 吗?还是我应该尝试完全不同的模式?
【问题讨论】:
-
为什么
updateFilter不返回一个承诺?
标签: javascript reactjs redux redux-thunk