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

ReactJS表单提交后组件自动刷新(非重载)及e.preventDefault()用法

React提交表单不刷新页面展示新增内容 & Formik中使用e.preventDefault()

一、不刷新页面展示新增内容的实现

核心逻辑是用React的状态管理维护列表数据,提交表单后直接更新状态,React会自动重新渲染页面展示新内容,完全不需要刷新页面或URL。

具体操作步骤:

  • 用useState钩子定义存储列表数据的状态
  • 表单提交时,获取用户输入的新内容,将其追加到列表状态中
  • 组件渲染时,遍历列表状态渲染所有内容

示例代码:

import { useState } from 'react';
import { Formik, Form, Field } from 'formik';

function ItemList() {
  // 存储已添加内容的状态
  const [items, setItems] = useState([]);

  return (
    <div>
      <Formik
        initialValues={{ content: '' }}
        onSubmit={(values, { resetForm, setSubmitting }) => {
          // 模拟后端接口请求(实际开发中替换为真实API调用)
          setTimeout(() => {
            // 更新列表,添加新内容
            setItems(prev => [...prev, values.content]);
            // 清空表单输入
            resetForm();
            setSubmitting(false);
          }, 600);
        }}
      >
        {({ isSubmitting }) => (
          <Form>
            <Field 
              type="text" 
              name="content" 
              placeholder="输入要添加的内容" 
              required 
            />
            <button type="submit" disabled={isSubmitting}>
              {isSubmitting ? '添加中...' : 'Add'}
            </button>
          </Form>
        )}
      </Formik>

      <div className="content-list">
        <h4>已添加内容:</h4>
        {items.length === 0 ? (
          <p>暂无内容</p>
        ) : (
          <ul>
            {items.map((item, idx) => (
              <li key={idx}>{item}</li>
            ))}
          </ul>
        )}
      </div>
    </div>
  );
}

export default ItemList;

二、Formik中使用e.preventDefault()

其实Formik的onSubmit函数已经默认帮你调用了e.preventDefault(),阻止了表单默认的页面刷新提交行为。但如果需要手动控制,有两种实现方式:

方式1:直接在表单的onSubmit事件中处理

如果不用Formik封装的提交逻辑,直接给表单绑定自定义提交函数,可以直接接收事件参数并调用阻止方法:

<Form onSubmit={(e) => {
  e.preventDefault(); // 手动阻止默认提交行为
  // 这里写你的自定义提交逻辑,比如获取表单数据、更新状态
}}>
  <Field type="text" name="content" />
  <button type="submit">Add</button>
</Form>

方式2:结合Formik的handleSubmit使用

如果要保留Formik的表单验证、状态管理能力,同时手动控制默认行为,可以在表单的onSubmit中传递事件:

<Formik
  initialValues={{ content: '' }}
  onSubmit={(values, actions) => {
    // 这里写提交逻辑,比如更新状态、调用API
    setItems(prev => [...prev, values.content]);
    actions.resetForm();
  }}
>
  {({ handleSubmit }) => (
    <Form onSubmit={(e) => {
      e.preventDefault(); // 手动阻止默认行为
      handleSubmit(e); // 调用Formik的提交逻辑
    }}>
      <Field type="text" name="content" />
      <button type="submit">Add</button>
    </Form>
  )}
</Formik>

多数场景下,直接使用Formik自带的onSubmit即可,它已经处理了默认提交行为,无需额外调用e.preventDefault()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:40