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

如何通过点击MockTable组件图标打开AddMock组件的折叠栏?

实现MockTable操作图标打开AddMock折叠栏的方案

这是个典型的组件间通信场景,咱们可以通过状态提升的方式来解决——把控制折叠栏展开的状态放到两个组件的共同父组件里,再通过props传递事件和状态,就能实现点击操作图标打开折叠栏的需求。

步骤1:在共同父组件中管理折叠状态

首先,创建一个父组件(或者用你现有的页面组件),用来存放折叠栏的展开状态,同时定义一个触发展开的回调函数:

import React, { useState } from 'react';
import MockTable from './MockTable';
import AddMock from './AddMock';

const MockManager = () => {
  // 初始状态为折叠状态(false)
  const [isAccordionExpanded, setIsAccordionExpanded] = useState(false);

  // 处理操作图标点击的函数:点击后将折叠栏设为展开状态
  const handleMockActionClick = () => {
    setIsAccordionExpanded(true);
  };

  return (
    <div className="mock-container">
      {/* 把回调传给MockTable */}
      <MockTable onActionClick={handleMockActionClick} />
      {/* 把展开状态传给AddMock */}
      <AddMock isExpanded={isAccordionExpanded} />
    </div>
  );
};

export default MockManager;

步骤2:给MockTable的操作图标绑定点击事件

修改MockTable组件,给每个操作图标添加onClick事件,触发父组件传来的回调:

import { Icon } from 'semantic-ui-react';

const MockTable = ({ onActionClick }) => {
  // 这里省略表格的其他结构,只展示操作列部分
  return (
    <tr>
      {/* 表格其他列... */}
      <td>
        <Icon link name="eye" onClick={onActionClick} />
        <Icon link name="edit" onClick={onActionClick} />
        <Icon link name="delete" onClick={onActionClick} />
      </td>
    </tr>
  );
};

export default MockTable;

步骤3:在AddMock中接收状态并控制折叠栏

修改AddMock组件,通过父组件传来的isExpanded状态控制Accordion的展开。这里利用React Bootstrap Accordion的activeKey属性来设置激活的折叠项:

import { Accordion, Card, Button, Container } from 'react-bootstrap';
import { Header } from 'semantic-ui-react';
import TabContent from './TabContent';

const AddMock = ({ isExpanded }) => {
  return (
    <div className="row">
      <Accordion 
        style={{ paddingLeft: "32px" }}
        // 根据isExpanded设置激活的折叠项:展开时设为"0",否则不设置
        activeKey={isExpanded ? "0" : undefined}
      >
        <Card className="collapseStyle">
          <Card.Header>
            <Accordion.Toggle as={Button} variant="link" eventKey="0">
              Add Mock
            </Accordion.Toggle>
          </Card.Header>
          <Accordion.Collapse eventKey="0">
            <Card.Body>
              <Container className="mockbody">
                <Header as="h3">Hierarchy</Header>
                <TabContent />
              </Container>
            </Card.Body>
          </Accordion.Collapse>
        </Card>
      </Accordion>
    </div>
  );
};

export default AddMock;

额外扩展:传递Mock数据(可选)

如果你的需求是点击查看/编辑图标时,还要把对应条目的数据传给AddMock(比如填充表单),可以修改回调函数接收参数:

在MockTable中传递数据:

<Icon link name="edit" onClick={() => onActionClick(mockItem)} />

然后在父组件中更新状态:

const [selectedMock, setSelectedMock] = useState(null);
const [isAccordionExpanded, setIsAccordionExpanded] = useState(false);

const handleMockActionClick = (mockItem) => {
  setSelectedMock(mockItem);
  setIsAccordionExpanded(true);
};

最后把selectedMock传给AddMock,用来填充表单内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:12:35