【发布时间】:2020-09-12 15:21:49
【问题描述】:
如何从 onRouteUpdate gatsby-browser.js API 中触发 redux 操作。
我有一个 TOGGLE_MENU 操作需要在用户成功导航到新页面时设置为 false,以关闭手机/平板电脑上的菜单。
我正在使用gatsby-plugin-react-redux 插件。
这里的当前实现:https://dev.poshwash.london
我尝试添加store.dispatch(toggleMenu(false)),但没有成功。
src/state/app.js
const initialState = {
isMenuOpen: false,
scrollY: 0,
}
const TOGGLE_MENU = "TOGGLE_MENU"
export const toggleMenu = isOpen => ({ type: TOGGLE_MENU, payload: isOpen })
export default (state = initialState, action) => {
const { type, payload } = action
switch (type) {
case TOGGLE_MENU: {
const scrollY = payload ? window.scrollY : state.scrollY
return { ...state, isMenuOpen: payload, scrollY }
}
default: {
return state
}
}
}
src/state/createStore.js
import { createStore } from "redux"
import { composeWithDevTools } from "redux-devtools-extension"
import rootReducer from "."
// preloadedState will be passed in by the plugin
export default preloadedState => {
return createStore(rootReducer, preloadedState, composeWithDevTools())
}
gatsby-browser.js
/**
* Implement Gatsby's Browser APIs in this file.
*
* See: https://www.gatsbyjs.org/docs/browser-apis/
*/
import { toggleMenu } from "./src/state/app"
import store from "./src/state/createStore"
export const onRouteUpdate = ({ location, prevLocation }) => {
store.dispatch(toggleMenu(false))
console.log("new pathname", location)
console.log("old pathname", prevLocation)
}
【问题讨论】:
标签: javascript reactjs redux gatsby