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

如何点击「Huỷ」按钮实现Collapse.Panel内容折叠?

实现点击「Huỷ」按钮折叠对应Collapse.Panel的功能

要实现点击「Huỷ」(取消)按钮时折叠当前的Collapse.Panel,核心是通过Ant Design Collapse组件的activeKey属性控制面板的展开/折叠状态,具体实现如下:

实现步骤与代码示例

1. 维护Collapse的展开状态

在包含Collapse的父组件中,通过React状态管理当前展开的面板key数组,点击按钮时更新该状态以触发面板折叠:

import { useState } from 'react';
import { Collapse, Form, Input, Button, Row, Col } from 'antd';

const UserSettings = () => {
  // 初始化展开状态,默认展开username面板
  const [activePanels, setActivePanels] = useState(['username']);

  // 取消按钮点击逻辑:移除当前面板的key,实现折叠
  const handleCancel = () => {
    setActivePanels(prevKeys => prevKeys.filter(key => key !== 'username'));
  };

  const onFinishUsername = (values) => {
    console.log('表单提交内容:', values);
    // 提交完成后也可触发折叠
    handleCancel();
  };

  const onFinishFailed = (errorInfo) => {
    console.log('表单提交失败:', errorInfo);
  };

  return (
    <Collapse activeKey={activePanels}>
      <Collapse.Panel header="Username" key="username">
        <Form
          labelAlign="right"
          labelCol={{ offset: 6 }}
          onFinish={onFinishUsername}
          onFinishFailed={onFinishFailed}
        >
          <Form.Item
            label="Username"
            name="username"
            rules={[{ required: true }, { warningOnly: true }]}
          >
            <Input />
          </Form.Item>
          <Form.Item wrapperCol={{ offset: 6 }}>
            <Row justify="end">
              <Col pull={1}>
                <Button type="primary" htmlType="submit">
                  Lưu
                </Button>
              </Col>
              <Col>
                {/* 绑定取消点击事件 */}
                <Button onClick={handleCancel}>Huỷ</Button>
              </Col>
            </Row>
          </Form.Item>
        </Form>
      </Collapse.Panel>
      {/* 其他面板可按相同逻辑扩展 */}
    </Collapse>
  );
};

export default UserSettings;

2. 类组件版本(若使用类组件)

如果是基于类组件开发,逻辑一致,仅状态管理方式调整:

import React from 'react';
import { Collapse, Form, Input, Button, Row, Col } from 'antd';

class UserSettings extends React.Component {
  state = {
    activePanels: ['username'],
  };

  handleCancel = () => {
    this.setState(prevState => ({
      activePanels: prevState.activePanels.filter(key => key !== 'username'),
    }));
  };

  onFinishUsername = (values) => {
    console.log('表单提交内容:', values);
    this.handleCancel();
  };

  onFinishFailed = (errorInfo) => {
    console.log('表单提交失败:', errorInfo);
  };

  render() {
    return (
      <Collapse activeKey={this.state.activePanels}>
        <Collapse.Panel header="Username" key="username">
          <Form
            labelAlign="right"
            labelCol={{ offset: 6 }}
            onFinish={this.onFinishUsername}
            onFinishFailed={this.onFinishFailed}
          >
            <Form.Item
              label="Username"
              name="username"
              rules={[{ required: true }, { warningOnly: true }]}
            >
              <Input />
            </Form.Item>
            <Form.Item wrapperCol={{ offset: 6 }}>
              <Row justify="end">
                <Col pull={1}>
                  <Button type="primary" htmlType="submit">
                    Lưu
                  </Button>
                </Col>
                <Col>
                  <Button onClick={this.handleCancel}>Huỷ</Button>
                </Col>
              </Row>
            </Form.Item>
          </Form>
        </Collapse.Panel>
      </Collapse>
    );
  }
}

export default UserSettings;

核心逻辑说明

  • activeKey:Collapse组件的核心控制属性,通过字符串数组指定当前展开的面板key。
  • handleCancel函数:点击「Huỷ」按钮时,过滤掉当前面板的key(username),更新状态后Collapse会自动折叠对应面板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:36