当前位置: 首页 > article >正文

react页面跳转时携带参数,返回时能展示跳转之前的数据

        在React中实现页面间的参数传递和数据持久化,可以使用react-router-dom库中的useHistory和useLocation钩子。

import React from 'react';
import { useHistory, useLocation } from 'react-router-dom';
import { Button } from 'antd';

// 页面A,跳转到页面B并传递参数
const PageA = () => {
  const history = useHistory();
  const { state } = useLocation(); // 这个state为保留操作记录的钩子 
  // 查询条件1 设置默认值state.params.paramA与getDatas()触发条件(params)一致 保证不会触发重复请求
  const [paramA, setParamA] = useState((state && state.params.paramA) || '');
  // 查询条件2 设置默认值state.params.paramA与getDatas()触发条件(params)一致 保证不会触发重复请求
  const [paramB, setParamB] = useState((state && state.params.paramB) || '');
  // 跳转到详情页时要保存的当前页的查询条件
  const [params, setParams] = useState((state && state.params) || null);

  // PageA查询数据
  useEffect(() => {
    getDatas();
  }, [params]);

  const getDatas = () => {
    getList({
      paramA,
      paramB,
    }).then(res => {
      // todo

    }).catch((err) => {
      console.log(err);
    });
  };

  const goToPageB = () => {
    history.push('/page-b', { state: { params } });
  };

  return (
    <div>
      <button onClick={goToPageB}>跳转到页面B</button>
    </div>
  );
};

// 页面B,获取参数并显示
const PageB = () => {
  const { state } = useLocation();

  return (
    <div>
      <p>传递的数据:{location.state ? location.state.params : '无数据'}</p>
      <Button type="primary" onClick={() => history.push({ pathname: '/page-a', state, })}>返回</Button>
    </div>
  );
};

export default PageA;

        当从PageA跳转到PageB时,使用history.push方法并以第二个参数的形式传递了一个状态对象。在PageB中,通过useLocation钩子获取到了包含状态的location对象,并从中提取了传递的数据。从PageB返回pageA时,使用history.push方法再将pageA页面的参数返回,作为useEffect依赖项触发pageA页面的数据查询。这样,即使页面发生跳转,也能够持久化并展示出页面间传递的数据。


http://www.kler.cn/news/353471.html

相关文章:

  • informer学习笔记
  • SpringBoot请求注解详解
  • 【云从】四、私有网络VPC
  • 学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画
  • 【c++】左值右值
  • 记一次ruoyi站点突破到内网后渗透
  • 谷歌新安装包文件形式 .aab 在UE4中的打包原理
  • 【AI知识】KNN算法原理代码示例可视化
  • 前端布局与响应式设计综合指南(三)
  • 电力建设中的常见翻译场景
  • PCL 点云配准 KD-ICP算法(精配准)
  • Invoke 和 InvokeRequired以及他们两个的区别
  • C++/初识C++
  • 【C语言】一维数组应用Fibonacci数列
  • 中文文本内容模板式总结,gpto1,claude某言初步测评
  • Vscode+Pycharm+Vue.js+WEUI+django火锅(五)Django的API
  • 021 elasticsearch索引管理
  • 10.10 QT服务器与客户端
  • 04 go语言(golang) - 变量和赋值过程
  • 配置MAC地址安全