You need to enable JavaScript to run this app. React Router 切换路由时如何将状态重置为初始值
优惠活动
大模型
产品
解决方案
定价
更多

React Router 切换路由时如何将状态重置为初始值

切换Route路由时重置context状态为初始值的实现方案

因为searchedMovie是存储在全局MoviesContext中的共享状态,不会随组件卸载自动重置,你只需要在MoviePage组件挂载时主动调用context提供的状态修改方法重置即可,具体实现步骤如下:

  • 第一步:确认MoviesContext已暴露状态修改方法
    你的context定义中需要同步导出修改searchedMovie的方法,参考示例:
// services/context.ts 中的context定义参考
import { createContext, useState } from 'react';

export const MoviesContext = createContext({
  searchedMovie: '',
  setSearchedMovie: (val: string) => {}
});

// 外层提供者组件逻辑
export const MoviesProvider = ({ children }) => {
  const [searchedMovie, setSearchedMovie] = useState('');
  return (
    <MoviesContext.Provider value={{ searchedMovie, setSearchedMovie }}>
      {children}
    </MoviesContext.Provider>
  )
}
  • 第二步:在MoviePage中新增挂载重置逻辑
    通过useEffect监听组件挂载行为,触发状态重置:
import { useContext, useEffect } from 'react';
import Topbar from '../Header/Topbar';
import MovieContent from '../Pages/MovieContent';
import Catalog from '../Catalog/Catalog';
import { MoviesContext } from "../../services/context";
import './Pages.scss';

const MoviePage = (props: any) => {
  const { searchedMovie, setSearchedMovie } = useContext(MoviesContext);

  // 路由进入当前组件时,重置搜索状态为初始值
  useEffect(() => {
    setSearchedMovie('');
    // 若存在路由复用组件的场景(比如同路由不同参数),可引入react-router的useLocation,将pathname加入依赖数组
  }, []);

  return (
    <>
      <Topbar />
      {searchedMovie === '' ? <MovieContent /> : <Catalog />}
    </>
  );
}

export default MoviePage;

如果你的业务场景需要在离开其他路由时就重置状态,也可以把useEffect的重置逻辑写在对应路由组件的卸载清理函数中即可。

内容的提问来源于stack exchange,提问作者rumon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:00:01