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

使用React Hook Form提交表单后如何将数据同步到AlbumList组件展示

问题根因

  • 你代码中自定义的cover/name/artist/year四个state变量没有和表单输入做绑定,也没有任何更新逻辑,始终是空值,你构造新专辑对象时用了这些空值,自然传递给列表的都是无效数据
  • React Hook Form已经将所有表单输入的结果收集到onSubmit回调的第一个参数data中,不需要额外自己维护state
  • 文件类型的输入值是File对象,不能直接作为img标签的src属性使用,需要转换为本地临时URL才能正常渲染

修复步骤

  1. 删除AddAlbum组件中无用的四个state定义:
// 直接删掉下面这四行代码即可
const [cover] = useState();
const [name] = useState('');
const [artist] = useState('');
const [year] = useState('');
  1. 修改onSubmit逻辑,从data中取表单值,处理文件字段:
const onSubmit = (data, e) => {
  console.log(data, e);
  // 处理封面文件,转成可渲染的临时URL
  const coverUrl = URL.createObjectURL(data.cover[0]);
  const newAlbum = {
    id: albums.length + 1,
    cover: coverUrl,
    name: data.name, // 对应你表单中名称输入框register的参数名
    artist: data.artist, // 对应你表单中艺术家输入框register的参数名
    year: data.year, // 对应你表单中年份输入框register的参数名
  };
  addAlbum(newAlbum);
  history.push('/');
};
  1. 修复AlbumList组件的JSX语法问题:
    • 把HTML属性class改成React规范的className
    • img标签改写成JSX要求的单标签写法:
    <img src={album.cover} alt="album cover" />
    

额外提示

如果后续需要持久化存储专辑信息,本地临时的ObjectURL会在页面刷新后失效,这时你需要把文件上传到服务器或者转成base64格式存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 01:42:01