当前位置:首页 > React

react如何实现页面跳转值

2026-01-25 05:45:28React

使用 React Router 实现页面跳转传值

React 中实现页面跳转传值主要通过 react-router-dom 库完成。以下是几种常见方法:

通过 URL 参数传值

利用 useParamsuseSearchParams 传递简单参数:

react如何实现页面跳转值

// 发送方组件
import { useNavigate } from 'react-router-dom';

function Sender() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate('/receiver/123'); // 路径参数
    // 或 navigate('/receiver?id=123'); // 查询参数
  };

  return <button onClick={handleClick}>跳转</button>;
}
// 接收方组件(路径参数)
import { useParams } from 'react-router-dom';

function Receiver() {
  const { id } = useParams();
  return <div>接收到的ID: {id}</div>;
}
// 接收方组件(查询参数)
import { useSearchParams } from 'react-router-dom';

function Receiver() {
  const [searchParams] = useSearchParams();
  const id = searchParams.get('id');
  return <div>接收到的ID: {id}</div>;
}

通过 state 传值

使用 navigate 的第二个参数传递复杂对象:

// 发送方
function Sender() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate('/receiver', {
      state: { 
        user: { name: 'John', age: 25 },
        timestamp: Date.now()
      }
    });
  };

  return <button onClick={handleClick}>跳转</button>;
}
// 接收方
import { useLocation } from 'react-router-dom';

function Receiver() {
  const location = useLocation();
  const { user, timestamp } = location.state || {};

  return (
    <div>
      用户信息: {user?.name}, {user?.age}
      <br />
      时间戳: {timestamp}
    </div>
  );
}

路由配置注意事项

确保路由配置正确匹配参数模式:

react如何实现页面跳转值

<Routes>
  <Route path="/receiver/:id" element={<Receiver />} />
  <Route path="/receiver" element={<Receiver />} />
</Routes>

类型安全传值(TypeScript)

为传递的值添加类型定义:

type RouteState = {
  user: {
    name: string;
    age: number;
  };
  timestamp: number;
};

// 发送方
navigate('/receiver', {
  state: {
    user: { name: 'John', age: 25 },
    timestamp: Date.now()
  } as RouteState
});

// 接收方
const location = useLocation();
const state = location.state as RouteState;

使用 Context 跨组件传值

对于需要深层传递或全局共享的数据:

const DataContext = createContext();

// 上层组件
<DataContext.Provider value={{ sharedData: 'value' }}>
  <App />
</DataContext.Provider>

// 任意子组件
const { sharedData } = useContext(DataContext);

分享给朋友:

相关文章

vue如何实现分离

vue如何实现分离

Vue 实现组件分离的方法 Vue 可以通过多种方式实现组件分离,提升代码的可维护性和复用性。以下是几种常见的方法: 单文件组件 (SFC) Vue 的单文件组件(.vue 文件)将模板、脚本和样式…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.definePr…

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过d…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 re…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

php如何实现静态化

php如何实现静态化

PHP 实现静态化的方法 使用 ob_start() 和 ob_get_contents() 利用 PHP 的输出缓冲功能捕获动态生成的页面内容,将其保存为静态文件。这种方法适用于内容不频繁变化的页面…