我正在研究使用redux-saga的项目,我有一个问题要问你。我试着用谷歌的力量在我的问题上找到答案,差不多两天,但它没有帮助。
我们在每个FETCH_REQUEST操作上都有一个由saga触发的函数。
export function* fetchData(action) {
try {
const usersList = (yield select()).usersList;
// makes API call only if there is no users found in the current state
if(!usersList) {
const data = yield call(Api.fetchUser)
}
yield put({type: "FETCH_SUCCEEDED", usersList})
} catch (error) {
yield put({type: "FETCH_FAILED", error})
}
}
成功时,FETCH_SUCCEEDED操作被触发,我们将接收的数据保存到状态。但在我看来,决策点“发出或不发出API调用”并不恰当。 当前的方法导致产生一些无用且在传奇中跳过的动作。如果其他一些sagas订阅_REQUEST操作,他们会触发另一个无用的操作,依此类推。
所以问题是 - 检查数据是否需要从API或ReduxStore加载的'最佳实践'是什么?
答案 0 :(得分:2)
我假设您从组件中发送FETCH_REQUEST
动作创建者。该组件可能会收到userList
作为属性。因此,此组件是确定是否应调度FETCH_REQUEST
操作的最佳位置。
这样的事情:
class MyComponent extends React.Component {
componentDidMount() {
if (!this.props.userList) {
this.props.fetchData();
}
}
}
...
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
在这种情况下,您不需要在传奇中使用选择器和额外条件。