Javascript 忽略redux Saga中的Saga,仅使用减速器
这里有一个关于redux传奇的问题。我正在调用Javascript 忽略redux Saga中的Saga,仅使用减速器,javascript,reactjs,redux,redux-saga,saga,Javascript,Reactjs,Redux,Redux Saga,Saga,这里有一个关于redux传奇的问题。我正在调用toggleSidebar()打开/关闭侧边栏。然而,这样做是可行的,这个传奇故事被忽略了。我使用console.log在我的reducer和saga中登录到控制台,但只有reducer登录到控制台 侧边栏打开/关闭,但是为什么这个传奇被忽略了呢 /sagas/templateSaga.js-不登录到控制台 /reducers/templateReducer.js-记录到控制台 /actions/index.js /reducers/index.js
toggleSidebar()
打开/关闭侧边栏。然而,这样做是可行的,这个传奇故事被忽略了。我使用console.log在我的reducer
和saga
中登录到控制台,但只有reducer
登录到控制台
侧边栏打开/关闭,但是为什么这个传奇被忽略了呢
/sagas/templateSaga.js-不登录到控制台
/reducers/templateReducer.js-记录到控制台
/actions/index.js
/reducers/index.js(rootReducer)
/sagas/index.js(rootSaga)
我的存储配置如下:
import createSagaMiddleware from 'redux-saga'
import rootReducer from '../modules/reducers'
import rootSaga from '../modules/sagas'
const sagaMiddleware = createSagaMiddleware(rootSaga);
const middleware = [
sagaMiddleware,
routerMiddleware(history)
]
export const store = createStore(
rootReducer,
applyMiddleware(...middleware)
)
sagaMiddleware.run(rootSaga)
最后,在我的应用程序中,我使用:
const mapStateToProps = state => ({
template: state.templateReducer
})
const mapDispatchToProps = dispatch =>
bindActionCreators({ toggleSidebar }, dispatch)
export default connect(mapStateToProps, mapDispatchToProps)(App);
错误可能出现在/sagas/index.js
(rootSaga)中
尝试将…templateSaga
更改为fork(templateSaga)
如下所示:
import { fork } from 'redux-saga/effects'
import { templateSaga } from './templateSaga'
export default function* rootSaga() {
yield all([
fork(templateSaga)
])
}
并将导出默认函数*templateSaga
更改为
export function* templateSaga() {
yield takeLatest("TOGGLE_SIDEBAR", toggleSidebar);
}
另外,在
/sagas/templateSaga.js
中有一个循环,您可以在其中使用'TOGGLE_SIDEBAR'
并立即在各个方面分派相同的类型。只是注意到了这个循环,很尴尬。我想这就是redux传奇的流程。我只想发送操作并更改状态。我是否必须为此创建另一个actiontype,或者是否有其他方法?因为我在我的rootSaga中导入了templateSaga(),它正在侦听操作。我应该在templateSaga()函数中立即分派它吗?这是一篇非常好的文章,如果您想更改状态,应该在reducer中执行。这完全取决于你想如何构造应用程序,但基本上在你的组件中调用toggleSidebar
操作就足以触发reducer。复杂的异步通信需要Saga
import templateSaga from './templateSaga'
export default function* rootSaga() {
yield all([
...templateSaga
])
}
import createSagaMiddleware from 'redux-saga'
import rootReducer from '../modules/reducers'
import rootSaga from '../modules/sagas'
const sagaMiddleware = createSagaMiddleware(rootSaga);
const middleware = [
sagaMiddleware,
routerMiddleware(history)
]
export const store = createStore(
rootReducer,
applyMiddleware(...middleware)
)
sagaMiddleware.run(rootSaga)
const mapStateToProps = state => ({
template: state.templateReducer
})
const mapDispatchToProps = dispatch =>
bindActionCreators({ toggleSidebar }, dispatch)
export default connect(mapStateToProps, mapDispatchToProps)(App);
import { fork } from 'redux-saga/effects'
import { templateSaga } from './templateSaga'
export default function* rootSaga() {
yield all([
fork(templateSaga)
])
}
export function* templateSaga() {
yield takeLatest("TOGGLE_SIDEBAR", toggleSidebar);
}