Redux saga - 如果redux store

时间:2017-09-18 07:10:45

标签: reactjs redux react-redux redux-saga

我正在研究使用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加载的'最佳实践'是什么?

1 个答案:

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

在这种情况下,您不需要在传奇中使用选择器和额外条件。