ここではredux-saga
に問題があります。サイドバーを開く/閉じるにはtoggleSidebar()
と呼んでいます。しかし、それはうまくいかない。 reducer
とsaga
にconsole.log
を使用してコンソールにログしますが、コンソールにはreducer
ログだけが記録されます。redux-sagaのSagaは無視され、還元剤のみが使用されます
サイドバーが開きますが、なぜサガは無視されますか?
/sagas/templateSaga.jsは - コンソールにログ
export default (state = initialState, {type, data = ""}) => {
switch (type) {
case TOGGLE_SIDEBAR: {
console.log("Called toggleSidebar in reducer");
return {...state, collapsed: data}
}
default: {
return {
...state
}
}
}
}
-
import { FETCH_DEFAULT_TEMPLATE, RECEIVE_DEFAULT_TEMPLATE } from '../actions'
function* toggleSidebar(action) {
console.log("Called toggleSidebar in Saga")
yield put({type: 'TOGGLE_SIDEBAR', data: action.payload});
}
export default function* templateSaga() {
yield takeLatest("TOGGLE_SIDEBAR", toggleSidebar);
}
/reducers/templateReducer.jsコンソールにログインしていません
/actions/index.js
export const TOGGLE_SIDEBAR = 'TOGGLE_SIDEBAR'
export const toggleSidebar = data => ({type: TOGGLE_SIDEBAR, data})
/reducers/index.js(rootReducer)
import templateReducer from './templateReducer'
export default combineReducers({
templateReducer
})
/sagas/index.js(rootSaga)
import templateSaga from './templateSaga'
export default function* rootSaga() {
yield all([
...templateSaga
])
}
マイストアのような構成ですその:おそらく/sagas/index.js
で
const mapStateToProps = state => ({
template: state.templateReducer
})
const mapDispatchToProps = dispatch =>
bindActionCreators({ toggleSidebar }, dispatch)
export default connect(mapStateToProps, mapDispatchToProps)(App);
すぐ右に同じタイプを派遣
/sagas/templateSaga.js
のループのいくつかの種類があります。ちょうどループに気づいた。それは考えています。私はアクションをディスパッチして状態を変更したいだけです。 別のアクションタイプを作成する必要がありますか、別の方法がありますか?私はrootSagaのtemplateSaga()をインポートしています。これはアクションをリッスンしています。私はそれをtemplateSaga()関数で正しく呼び出す必要がありますか? – Dawgここでは還元剤で行うべき状態を変更したい場合は、https://medium.freecodecamp.org/async-operations-using-redux-saga-2ba02ae077b3 –
という本当に良い記事です。どのようにアプリケーションを構造化したいかによって異なりますが、基本的にコンポーネントの 'toggleSidebar'アクションを呼び出すだけで、減速機が起動されます。複雑な非同期通信には佐賀が必要です –