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

如何在Form的onSubmit事件中将TabStrip选中项设为第一个标签页?

问题

如何在Form的onSubmit事件中将TabStrip的“selected”标签页设置为第一个标签页?我需要调用tabStrip.setSelected(0),但按照React的开发方式,不确定如何获取TabStrip的引用?

附原代码:

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Field, Form, FormElement } from '@progress/kendo-react-form';
import { Button } from '@progress/kendo-react-buttons';

import {
  TabStrip,
  TabStripSelectEventArguments,
  TabStripTab,
} from '@progress/kendo-react-layout';

const App = () => {
  const [selected, setSelected] = React.useState<number>(2);

  const handleSelect = (e: TabStripSelectEventArguments) => {
    setSelected(e.selected);
  };

  const handleSubmit = (dataItem) => {
    alert("Submit OK");
  };

return (
    <Form
      onSubmit={handleSubmit}
      render={(formRenderProps) => (
        <div>
          <TabStrip selected={selected} onSelect={handleSelect}>
            <TabStripTab title="Tab 1 Title">
              <p>Tab 1 Content</p>
            </TabStripTab>
            <TabStripTab title="Tab 2 Title">
              <p>Tab 2 Content</p>
            </TabStripTab>
            <TabStripTab title="Tab 3 Title">
              <p>Tab 3 Content</p>
            </TabStripTab>
          </TabStrip>

          <span style={{ padding: 10 }}>
            <Button type={'submit'} icon="save" onClick={handleSubmit}>
              Save
            </Button>
          </span>
        </div>
      )}
    ></Form>
  );
};
ReactDOM.render(<App />, document.querySelector('my-app'));
解决方案

方式一:通过状态控制(推荐的React范式)

你已经通过useState维护了TabStrip的选中状态selected,完全不需要直接操作组件实例,直接在提交事件中更新状态即可:

修改handleSubmit函数,添加状态更新逻辑:

const handleSubmit = (dataItem) => {
  alert("Submit OK");
  setSelected(0); // 切换到第一个标签页
};

这种方式符合React单向数据流的设计理念,是更简洁、易维护的实现方式。

方式二:获取组件引用调用实例方法

如果确实需要调用TabStrip的setSelected实例方法,可以通过useRef获取组件引用:

  1. 创建ref对象:
const tabStripRef = React.useRef<TabStrip>(null);
  1. 将ref绑定到TabStrip组件:
<TabStrip ref={tabStripRef} selected={selected} onSelect={handleSelect}>
  1. 在handleSubmit中调用实例方法:
const handleSubmit = (dataItem) => {
  alert("Submit OK");
  tabStripRef.current?.setSelected(0); // 调用实例方法切换标签页
};
完整修改后的代码(以方式一为例)
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Field, Form, FormElement } from '@progress/kendo-react-form';
import { Button } from '@progress/kendo-react-buttons';

import {
  TabStrip,
  TabStripSelectEventArguments,
  TabStripTab,
} from '@progress/kendo-react-layout';

const App = () => {
  const [selected, setSelected] = React.useState<number>(2);

  const handleSelect = (e: TabStripSelectEventArguments) => {
    setSelected(e.selected);
  };

  const handleSubmit = (dataItem) => {
    alert("Submit OK");
    setSelected(0); // 切换到第一个标签页
  };

return (
    <Form
      onSubmit={handleSubmit}
      render={(formRenderProps) => (
        <div>
          <TabStrip selected={selected} onSelect={handleSelect}>
            <TabStripTab title="Tab 1 Title">
              <p>Tab 1 Content</p>
            </TabStripTab>
            <TabStripTab title="Tab 2 Title">
              <p>Tab 2 Content</p>
            </TabStripTab>
            <TabStripTab title="Tab 3 Title">
              <p>Tab 3 Content</p>
            </TabStripTab>
          </TabStrip>

          <span style={{ padding: 10 }}>
            <Button type={'submit'} icon="save">
              Save
            </Button>
          </span>
        </div>
      )}
    ></Form>
  );
};
ReactDOM.render(<App />, document.querySelector('my-app'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:54:56