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

React自定义Hook实现颜色表单报错,提交时颜色值为undefined

React自定义Hook表单问题修复:undefined颜色值及属性警告

问题现象

实现自定义Hook时,表单提交后颜色代码显示undefined,控制台出现警告:Invalid attribute name: '0'。

错误原因

  1. 颜色输入未使用自定义Hook:colorProps直接通过useState获取,useState返回的是[值, 更新函数],这里colorProps实际是字符串#000000。将字符串展开到<input>标签上时,React会把字符串的索引(如0、1)当作DOM属性名,触发无效属性警告。
  2. 错误访问属性:submit函数里的colorProps.value是错误写法——colorProps是字符串,根本不存在value属性,因此提交时显示undefined。

修复代码

将颜色输入也改用自定义useInput Hook,统一表单输入的处理逻辑:

import "./App.css";
import { useState } from "react";
function useInput(initialValue) {
  const [value, setValue] = useState(initialValue);
  return [
    {
      value, 
      onChange: (e) => setValue(e.target.value)
    },
    () => setValue(initialValue)
  ]
}

function App() {
  const [titleProps, resetTitle] = useInput("");
  // 改用useInput处理颜色输入
  const [colorProps, resetColor] = useInput("#000000");
  const submit = (e) => {
    e.preventDefault();
    alert(`${titleProps.value}, ${colorProps.value}`);
    resetTitle();
    // useInput的reset函数无需传参,自动用初始值重置
    resetColor();
  };
  return (
    <form onSubmit={submit}>
      <input
        {...titleProps}
        type="text"
        placeholder="color title..."
      />
      <input
        {...colorProps}
        type="color"
      />
      <button>ADD</button>
    </form>
  );
}

export default App;

修复效果

  • 表单提交时能正确显示颜色代码,不再出现undefined
  • 控制台的Invalid attribute name: '0'警告消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:55:37