У меня саги настроены следующим образом.
export function* watchInstanceDataSetAssocSaga() {
yield takeLatest(
actionTypes.FETCH_INSTANCE_DATASETS_ASSOC_INITIATE,
fetchInstanceDataSetAssocSaga
)
}
const actionWatchers = sagaMiddleware => {
sagaMiddleware.run(watchInstanceDataSetAssocSaga)
}
function* fetchInstanceDataSetAssocSaga(action) {
console.log('in saga')
//Making Api Call
}
const composeEnhancers =
process.env.NODE_ENV === 'development'
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
: null || compose
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
rootReducer,
composeEnhancers(applyMiddleware(sagaMiddleware))
)
actionWatchers(sagaMiddleware)
В моем компоненте контейнера я отправляю действие, чтобы вызвать сагу.
export class InstanceDatasetsAssoc extends Component {
componentWillMount() {
console.log('in componentWillMount')
}
componentDidMount() {
if (!this.props.records.length) {
console.log('in did mount')
const {
pageInfo: {
first: { url }
}
} = this.props
let paginationParams = {
url
}
this.props.onFetchInstanceDataSetAssoc(paginationParams)
}
}
...
}
Когда я нажимаю URL, я получаю следующие операторы журнала.
**
in componentWillMount
in saga
in did mount
in saga
**
Моя сага вызывается дважды, а я дважды "в саге", поэтому мой вызов API происходит дважды.
Может кто-нибудь объяснить, что мне не хватает ??