如何在 React 中跨页面安全传递数据(如表格行记录)

2次阅读

如何在 React 中跨页面安全传递数据(如表格行记录)

本文介绍使用 react router 与 context api 实现父子组件及跨路由页面间的数据传递,解决点击编辑按钮后 `row` 数据丢失的问题,确保 `editrecord` 页面能可靠获取原始记录。

react 应用中,当用户点击表格中的“编辑”按钮跳转到 /edit 页面时,若仅通过局部 useState 设置数据并立即导航(如 href 跳转),该状态将因组件卸载而丢失——这正是你遇到 record props 消失的根本原因。关键在于:状态需提升至路由级共享作用域,并配合声明式导航触发数据持久化。

✅ 正确做法:React Router + Context 管理跨页数据

1. 配置路由(app.js

import { BrowserRouter as Router, switch, Route } from 'react-router-dom'; import ParentComponent from './ParentComponent'; import EditRecord from './EditRecord';  function App() {   return (                                             ); } export default App;

2. 创建全局数据上下文(RecordContext.js

import React, { createContext, useState, useContext } from 'react';  const RecordContext = createContext();  export const RecordProvider = ({ children }) => {   const [record, setRecord] = useState({});    return (            {children}        ); };  export const useRecord = () => {   const context = useContext(RecordContext);   if (!context) throw new Error('useRecord must be used within RecordProvider');   return context; };

3. 包裹根组件(index.js 或 Root.js)

import React from 'react'; import ReactDOM from 'react-dom/client'; import { RecordProvider } from './RecordContext'; import App from './App';  const root = ReactDOM.createRoot(document.getElementById('root')); root.render(            );

4. 父组件:点击时存数据 + 编程式导航(ParentComponent.js)

⚠️ 重要修正:移除 和内联 setRecord,改用 useHistory(v5)或 useNavigate(v6)

import React from 'react'; import { useNavigate } from 'react-router-dom'; // v6 写法(推荐) import { useRecord } from './RecordContext';  const ParentComponent = ({ data }) => {   const navigate = useNavigate();   const { setRecord } = useRecord();    const handleEdit = (row) => {     setRecord(row); // ✅ 存入全局上下文     navigate('/edit'); // ✅ 编程式导航,不触发页面刷新   };    return (            {data.map((row, index) => (                                                            ))}        ); };  export default ParentComponent;

5. 子页面:从上下文读取数据(EditRecord.js)

import React from 'react'; import { useRecord } from './RecordContext';  const EditRecord = () => {   const { record } = useRecord();    // ✅ 此处 record 始终为最新选中的行数据   if (!Object.keys(record).length) {     return 
未选择要编辑的记录,请返回列表页
; } return (

编辑记录

{json.stringify(record, null, 2)}

{/* 此处可接入表单、API 提交等逻辑 */} ); }; export default EditRecord;

⚠️ 注意事项与替代方案

  • 不要用 href 跳转 + useState 是硬跳转,会销毁当前组件实例,本地状态必然丢失。
  • 避免 URL 参数传复杂对象:?id=123 适合简单 ID,但 row 若含嵌套结构或二进制数据,应走状态管理而非序列化到 URL。
  • 进阶场景建议
    • 数据量大或需服务端同步 → 使用 Redux Toolkit 或 Zustand;
    • 多级嵌套路由 → 结合 useParams + 后端查询,而非前端传整个对象;
    • 需持久化(刷新不丢)→ 在 setRecord 时同步写入 sessionStorage。

通过 Context + Router 的组合,你构建了一个轻量、可维护、符合 React 思想的跨页数据流,既规避了 prop-drilling,又保证了状态生命周期与路由一致。

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

作者最新文章

热门AI工具

更多

如何在 React 中跨页面安全传递数据(如表格行记录)

DeepSeek

幻方量化公司旗下的开源大模型平台

如何在 React 中跨页面安全传递数据(如表格行记录)

豆包大模型

字节跳动自主研发的一系列大型语言模型

如何在 React 中跨页面安全传递数据(如表格行记录)

通义千问

阿里巴巴推出的全能AI助手

如何在 React 中跨页面安全传递数据(如表格行记录)

腾讯元宝

腾讯混元平台推出的AI助手

如何在 React 中跨页面安全传递数据(如表格行记录)

文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

如何在 React 中跨页面安全传递数据(如表格行记录)

讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

如何在 React 中跨页面安全传递数据(如表格行记录)

即梦AI

一站式AI创作平台,免费AI图片和视频生成。

如何在 React 中跨页面安全传递数据(如表格行记录)

ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

text=ZqhQzanResources