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

React.js中e.preventDefault()不生效,表单提交导致页面刷新如何解决?

问题原因及解决方法

核心错误点

  • 事件绑定属性名拼写错误:React 中所有事件绑定属性都遵循驼峰命名规范,你代码中给自定义按钮组件绑定的是小写的onclick,正确写法应为onClick。由于属性名不匹配,点击按钮时addNewPost处理函数根本没有执行,函数内的e.preventDefault()也没有生效,表单触发了默认的提交刷新行为。
  • 补充:表单默认提交行为的触发条件包含「点击表单内type为submit的按钮」、「输入框按回车」两种,仅给按钮绑定点击事件覆盖场景不全。

修复方案

方案1:修正按钮事件绑定拼写

将按钮的onclick改为onClick即可:

<Mybutton onClick={addNewPost}>Створити пост</Mybutton>

方案2(更推荐):给表单绑定onSubmit事件

直接在form标签上绑定提交事件,覆盖所有表单提交场景,无需依赖按钮的点击事件:

// 修改addNewPost为表单提交处理函数,调用e.preventDefault()拦截默认行为
const addNewPost=function(e){
  e.preventDefault();
  const newpost={
    title,
    body,
    id: Date.now() // 补充id避免后续列表渲染报错
  };
  console.log(newpost);
  // 可自行添加逻辑把新post加入原数组更新视图
  // setpost([...post, newpost])
};

return (
  <div className="App">
     {/* 给form绑定onSubmit */}
     <form onSubmit={addNewPost}>
       <Myinput     
        value={title}
        onChange={e => setTitle(e.target.value)}
        type="text"
        placeholder="帖子标题"/>
       <Myinput 
        type="text"
        value={body}
        onChange={e => setBody(e.target.value)}
        placeholder="帖子描述"/>
        {/* 按钮可以去掉点击事件,默认作为表单提交按钮即可,也可以显式加type="submit" */}
        <Mybutton type="submit">Створити пост</Mybutton>       
     </form>
  </div>
);

额外注意

你代码里第二个Myinput组件重复写了type和placeholder属性,属于冗余代码,可自行清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:03