在 url 更改时重置 redux 状态
Resetting redux states on url change
我有一个使用 redux 的项目。但是当我点击 <Link>
组件或点击 chrome 上的“上一页”按钮时,redux 会保留我之前更改的状态。我尝试了 connected-react-router
中的 LOCATION_CHANGE
操作并在 reducer 中使用它,但它似乎不起作用。
减速器:
import {LOCATION_CHANGE} from "connected-react-router"
function reducer(state=defaultState,action) {
switch (action.type) {
case LOCATION_CHANGE:
console.log("changed")
return defaultState
default:
return state
}
}
您可以尝试这样的操作:
class ScrollToTop extends Component {
componentDidUpdate(prevProps) {
if (this.props.location !== prevProps.location) {
window.scrollTo(0, 0);
dispatch({ type: LOCATION_CHANGE });
}
}
render() {
return this.props.children
}
}
export default withRouter(ScrollToTop)
const App = () => (
<Router>
<ScrollToTop>
<App/>
</ScrollToTop>
</Router>
)
我有一个使用 redux 的项目。但是当我点击 <Link>
组件或点击 chrome 上的“上一页”按钮时,redux 会保留我之前更改的状态。我尝试了 connected-react-router
中的 LOCATION_CHANGE
操作并在 reducer 中使用它,但它似乎不起作用。
减速器:
import {LOCATION_CHANGE} from "connected-react-router"
function reducer(state=defaultState,action) {
switch (action.type) {
case LOCATION_CHANGE:
console.log("changed")
return defaultState
default:
return state
}
}
您可以尝试这样的操作:
class ScrollToTop extends Component {
componentDidUpdate(prevProps) {
if (this.props.location !== prevProps.location) {
window.scrollTo(0, 0);
dispatch({ type: LOCATION_CHANGE });
}
}
render() {
return this.props.children
}
}
export default withRouter(ScrollToTop)
const App = () => (
<Router>
<ScrollToTop>
<App/>
</ScrollToTop>
</Router>
)