使用React Router DOM处理浏览器后退按钮

卢吉

这是我第一次来

我正在一个网站上使用TMDB API,React,Redux和React Router Dom显示有关电影的信息和电视节目。我想按类型和页面对电影进行排序。因此,在我的电影页面中,我有一个流派列表,每个流派都有一个ID,使我的useEffect()钩子可以在每次单击新流派或更改页面时重新呈现。

电影页面的链接看起来像以下movie /:genreID /:pageNumber因此,基本上,这个想法是每次单击一种类型或更改页面时,URL更新,然后我使用useParams()从中获取新的genreID和pageNumber,然后将它们发送给派遣对象并重新渲染组件。

我的代码看起来像这样

const Movies = ({ isFrench, isOpen }) => {

  const dispatch = useDispatch();
  const history = useHistory();
  const { genreID, pageNumber } = useParams();

  const language = isFrench ? "fr" : "";
  const [genres, setGenres] = useState(genreID);
  const [page, setPage] = useState(pageNumber);

  useEffect(() => {
    dispatch(fetchMovies(language, page, genres));
    history.push(`movies/${genres}/${page}`);
  }, [dispatch, language, page, genres, history]);

  const { popularMovies, numOfPages, isLoading } = useSelector(
    (state) => state.movies
  );

  //Change Category
  const changeCategoryHandler = (id) => {
    setPage(1);
    setGenres(id);
    getCategoryName(id);
  };

  //Print categories
  const frenchCategories = categoriesMoviesFR.map((category) => (
    <li onClick={() => changeCategoryHandler(category.id)} id={category.id}>
      {category.name}
    </li>
  ));
  
  ... 
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

问题是,例如,如果我在第3页上,并且按浏览器的“后退”按钮返回到第2页,则可以看到该链接在浏览器中发生了变化,但组件未更新。流派也是如此。如果我退出Action for Adventure并单击“后退”按钮以返回到Action,则可以看到链接发生了变化,但组件没有刷新。

有没有人遇到过这种问题?感谢您提供的任何帮助

Janice Zhong

问题在这里:

  const { genreID, pageNumber } = useParams();
  const [genres, setGenres] = useState(genreID);
  const [page, setPage] = useState(pageNumber);

您正在使用动态props值初始化状态,但是state的默认值不会改变,因为useState仅被调用一次。您可以尝试打印出genreIDpageNumber,并genrespage找出。

您可以直接{ genreID, pageNumber }在整个Movies组件中使用如果您确实需要将它们存储在状态中,请使用useEffect以下命令:

useEffect(()=>{
  setGenres(genreID)
  setPage(pageNumber)
},[genreID, pageNumber])

为您做了一个非常简单的演示,以使您对这种类型的问题有清晰的认识。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在React-router中拦截/处理浏览器的后退按钮?

来自分类Dev

无法安装React-Router,但需要浏览器后退按钮功能

来自分类Dev

vue-router:使用浏览器后退按钮时跳过页面

来自分类Dev

react-router-dom,如何跳过后退按钮

来自分类Dev

使用jQuery更改浏览器中的后退按钮功能

来自分类Dev

使用Javascript或AngularJS控制或禁用浏览器后退按钮

来自分类Dev

使用浏览器的“后退”按钮保持Bootstrap模式打开

来自分类Dev

使用jQuery更改浏览器中的后退按钮功能

来自分类Dev

如何使用氦气单击浏览器的后退导航按钮?

来自分类Dev

如何通过react-router-dom防止浏览器返回并保持状态

来自分类Dev

如何使用HTML5 pushState更改浏览器URL时如何处理后退按钮

来自分类Dev

使用浏览器后退按钮后退导航不起作用

来自分类Dev

Meteor userId 在浏览器导航中清除(使用 react-router)

来自分类Dev

Angular ui-router:按浏览器中的“后退”按钮可停止重新加载控制器

来自分类Dev

在react-router-dom中返回时浏览器历史记录不起作用

来自分类Dev

使用量角器或javascript的浏览器后退按钮

来自分类Dev

使用量角器或javascript的浏览器后退按钮

来自分类Dev

React-Router使用jQuery浏览路线

来自分类Dev

使用React-Router-Dom创建PrivateRoute

来自分类Dev

如何使用React Router处理登录状态?

来自分类Dev

使用 React Router PrivateRoute 处理 Refreshtoken

来自分类Dev

使用浏览器“后退”按钮时,React 中的状态和显示不一致

来自分类Dev

XPages:处理浏览器后退按钮

来自分类Dev

当用户单击 react-router-dom 上的后退按钮时,如何更改组件的状态?

来自分类Dev

使用history.pushState后检测浏览器后退按钮

来自分类Dev

如何使用JavaScript在浏览器中禁用后退按钮

来自分类Dev

如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

来自分类Dev

Angular不会使用浏览器后退/前进按钮呈现Facebook发布

来自分类Dev

如何使用浏览器的后退按钮获取上一个搜索页面

Related 相关文章

  1. 1

    在React-router中拦截/处理浏览器的后退按钮?

  2. 2

    无法安装React-Router,但需要浏览器后退按钮功能

  3. 3

    vue-router:使用浏览器后退按钮时跳过页面

  4. 4

    react-router-dom,如何跳过后退按钮

  5. 5

    使用jQuery更改浏览器中的后退按钮功能

  6. 6

    使用Javascript或AngularJS控制或禁用浏览器后退按钮

  7. 7

    使用浏览器的“后退”按钮保持Bootstrap模式打开

  8. 8

    使用jQuery更改浏览器中的后退按钮功能

  9. 9

    如何使用氦气单击浏览器的后退导航按钮?

  10. 10

    如何通过react-router-dom防止浏览器返回并保持状态

  11. 11

    如何使用HTML5 pushState更改浏览器URL时如何处理后退按钮

  12. 12

    使用浏览器后退按钮后退导航不起作用

  13. 13

    Meteor userId 在浏览器导航中清除(使用 react-router)

  14. 14

    Angular ui-router:按浏览器中的“后退”按钮可停止重新加载控制器

  15. 15

    在react-router-dom中返回时浏览器历史记录不起作用

  16. 16

    使用量角器或javascript的浏览器后退按钮

  17. 17

    使用量角器或javascript的浏览器后退按钮

  18. 18

    React-Router使用jQuery浏览路线

  19. 19

    使用React-Router-Dom创建PrivateRoute

  20. 20

    如何使用React Router处理登录状态?

  21. 21

    使用 React Router PrivateRoute 处理 Refreshtoken

  22. 22

    使用浏览器“后退”按钮时,React 中的状态和显示不一致

  23. 23

    XPages:处理浏览器后退按钮

  24. 24

    当用户单击 react-router-dom 上的后退按钮时,如何更改组件的状态?

  25. 25

    使用history.pushState后检测浏览器后退按钮

  26. 26

    如何使用JavaScript在浏览器中禁用后退按钮

  27. 27

    如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

  28. 28

    Angular不会使用浏览器后退/前进按钮呈现Facebook发布

  29. 29

    如何使用浏览器的后退按钮获取上一个搜索页面

热门标签

归档