我使用react-router有以下代码。
componentDidMount() {
const { categories, isFetching, filterCategories, match } = this.props
if (categories.length === 0 && !isFetching) {
this.props.fetchData("categories", requestCategories, receiveCategories)
}
window.onpopstate = ()=> {
filterCategories(match.params.category || "")
}
}
期望 match.params.category将始终按照URL中的内容返回类别
实际发生的事情 这工作正常,但是当我按下前进按钮时,match.params.category返回前一个URL的值。
我在这里做错了还是这个错误?
答案 0 :(得分:0)
我使用matchPath
和' location.history'来解决这个问题。
这使我能够解决当按下后退或前进按钮时match
似乎有一个不正确的URL的事实。
import { matchPath } from 'react-router'
class CategoryContainer extends Component {
getCategoryFromUrl = (url) => {
const match = matchPath(url, {path: '/:category', exact: true, strict: false})
return match === null ? "" : match.params.category
}
/**
* @description - trigger a request action
*/
componentDidMount() {
const { categories, isFetching, filterCategories, match, history } = this.props
if (categories.length === 0 && !isFetching) {
this.props.fetchData("categories", requestCategories, receiveCategories)
}
filterCategories(match.params.category || "")
window.onpopstate = () => {
filterCategories(this.getCategoryFromUrl(history.location.pathname))
}
}