You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据来源页面条件渲染React函数式组件?

实现示例方案

首先纠正一个误区:React的Props并非静态,完全可以动态传递参数实现条件渲染,结合路由传参就能解决你的页面来源判断需求,以下是对应场景的实现示例:

1. TableB组件:基于Props的条件渲染

核心是通过接收props参数,控制混合菜单的显示/隐藏:

// TableB 函数式组件
function TableB(props) {
  // 从props获取来源标识
  const { isFromSpecialTab } = props;

  return (
    <div>
      {/* 冰淇淋甜筒数据表格 */}
      <table className="ice-cream-table">
        {/* 表格内容示例 */}
        <thead>
          <tr>
            <th>甜筒名称</th>
            <th>价格</th>
          </tr>
        </thead>
        <tbody>
          {/* 这里渲染具体数据 */}
        </tbody>
      </table>

      {/* 条件渲染混合菜单:仅非特殊标签页来源时显示 */}
      {!isFromSpecialTab && (
        <div className="mix-menu">
          <h3>混合菜单</h3>
          <ul>
            <li>圣代套餐</li>
            <li>甜筒+饮料组合</li>
          </ul>
        </div>
      )}
    </div>
  );
}

2. 页面跳转时传递来源参数(结合React Router)

因为涉及多页面跳转,通过URL查询参数传递来源标识是最直接的方式:

场景1:页面1的TableA跳转至带混合菜单的TableB

import { Link } from 'react-router-dom';

function TableA() {
  // 示例冰淇淋数据
  const iceCreamData = [
    { id: 1, name: '巧克力甜筒', price: '12元' },
    { id: 2, name: '香草甜筒', price: '10元' }
  ];

  return (
    <table>
      {iceCreamData.map(item => (
        <tr key={item.id}>
          <td>
            {/* 跳转时传递isFromSpecialTab=false */}
            <Link 
              to={{
                pathname: '/page2',
                search: `?isFromSpecialTab=false&iceCreamId=${item.id}`
              }}
            >
              {item.name}
            </Link>
          </td>
          <td>{item.price}</td>
        </tr>
      ))}
    </table>
  );
}

场景2:页面2的特殊标签页返回TableA,再跳转至不带混合菜单的TableB

// 页面2中的特殊标签页链接
import { Link } from 'react-router-dom';

function Page2Header() {
  return (
    <div className="tabs">
      <Link to={{
        pathname: '/table-a',
        search: '?fromSpecialTab=true'
      }}>
        特殊标签页(返回Table A)
      </Link>
    </div>
  );
}

// 此时的TableA需要读取URL参数,跳转时传递isFromSpecialTab=true
import { useLocation } from 'react-router-dom';

function TableA() {
  const location = useLocation();
  // 读取是否来自特殊标签页的参数
  const isFromSpecialTab = new URLSearchParams(location.search).get('fromSpecialTab') === 'true';
  const iceCreamData = [/* 数据同前 */];

  return (
    <table>
      {iceCreamData.map(item => (
        <tr key={item.id}>
          <td>
            <Link 
              to={{
                pathname: '/page2',
                search: `?isFromSpecialTab=${isFromSpecialTab}&iceCreamId=${item.id}`
              }}
            >
              {item.name}
            </Link>
          </td>
        </tr>
      ))}
    </table>
  );
}

页面2接收参数并传递给TableB

import { useLocation } from 'react-router-dom';
import TableB from './TableB';

function Page2() {
  const location = useLocation();
  const isFromSpecialTab = new URLSearchParams(location.search).get('isFromSpecialTab') === 'true';

  return (
    <div>
      <Page2Header />
      {/* 将参数传递给TableB */}
      <TableB isFromSpecialTab={isFromSpecialTab} />
    </div>
  );
}

3. 可选:结合State实现动态切换(如果需要)

如果后续需要在TableB页面内手动切换混合菜单的显示状态,可以用State配合Props初始化:

import { useState } from 'react';

function TableB(props) {
  // 用props初始化state,支持后续动态修改
  const [showMixMenu, setShowMixMenu] = useState(!props.isFromSpecialTab);

  return (
    <div>
      <table>
        {/* 表格内容 */}
      </table>

      {showMixMenu && (
        <div className="mix-menu">
          {/* 混合菜单内容 */}
          <button onClick={() => setShowMixMenu(false)}>隐藏混合菜单</button>
        </div>
      )}
      {!showMixMenu && (
        <button onClick={() => setShowMixMenu(true)}>显示混合菜单</button>
      )}
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:40:29