当前位置:首页 > React

react如何实现页面跳转值

2026-01-25 05:45:28React

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

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

通过 URL 参数传值

利用 useParamsuseSearchParams 传递简单参数:

// 发送方组件
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>
  );
}

路由配置注意事项

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

<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 跨组件传值

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

react如何实现页面跳转值

const DataContext = createContext();

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

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

分享给朋友:

相关文章

vue实现界面跳转

vue实现界面跳转

路由配置 在Vue项目中实现界面跳转通常依赖Vue Router。需在router/index.js中配置路由路径和组件映射关系: import { createRouter, createWebH…

vue实现内部跳转

vue实现内部跳转

Vue 实现内部跳转的方法 在 Vue 中实现内部跳转通常涉及路由导航,以下是几种常见方式: 使用 <router-link> 组件 <router-link to="/path"…

vue如何实现轮播

vue如何实现轮播

使用 Vue 实现轮播 使用第三方库(推荐) Vue 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper。以下是使用 vue-awesome-swiper 的示…

vue如何实现uuid

vue如何实现uuid

生成 UUID 的方法 在 Vue 中生成 UUID 可以通过第三方库或原生 JavaScript 实现。以下是几种常见方法: 使用 uuid 库 安装 uuid 库: npm install u…

vue 实现自动跳转

vue 实现自动跳转

使用 vue-router 实现自动跳转 在 Vue 项目中,可以通过 vue-router 的编程式导航实现页面自动跳转。以下是几种常见场景的实现方法: 基础跳转 // 在组件方法中调用 thi…

vue实现URL跳转

vue实现URL跳转

Vue 实现 URL 跳转的方法 在 Vue 中实现 URL 跳转可以通过多种方式完成,以下是常见的几种方法: 使用 router-link 组件 router-link 是 Vue Router…