我正在构建一个 colored颜色 生成器,我注意到如果您只编写代码(例如:C4C4C4)而不添加"#",则不会发生任何事情.

我希望它能够工作,即使用户忘记添加"#".

也许是让代码在单击"提交"后添加它.

function App() {
  const [color, setColor] = useState("");
  const [error, setError] = useState(false);
  const [list, setList] = useState(new Values("#C4C4C4").all(10));

  const handleSubmit = (e) => {
    e.preventDefault();
    try {
      let colors = new Values(color).all(10);
      setList(colors);
    } catch (error) {
      setError(true);
      console.log(error);
    }
  };

  return (
    <>
      <Navbar />
      <section className="container">
        <form onSubmit={handleSubmit}>
          <input
            type="text"
            value={color}
            onChange={(e) => setColor(e.target.value)}
            placeholder="#C4C4C4"
            className={`${error ? "error" : null}`}
          />
          <button className="btn" type="submit">
            Submit
          </button>
        </form>
      </section>
      <section className="colors">
        {list.map((color, index) => {
          return (
            <SingleColor
              key={index}
              {...color}
              index={index}
              hexColor={color.hex}
            />
          );
        })}
      </section>
      <Footer />
    </>
  );
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

推荐答案

您可以在输入的更改处理程序中执行此操作.这将强制输入始终从#开始.

const handleChangeColor = (e) => {
  let value = e.target.value;
  if (value.length > 0 && !value.startsWith("#")) {
    value = "#" + value;
  }
  setColor(value);
}


<input
  ...
  ...
  onChange={handleChangeColor}
/>

或在提交后:

const handleSubmit = (e) => {
  e.preventDefault();
  try {
    let value = color;
    if (value.length > 0 && !value.startsWith("#")) {
      value = "#" + value;
    }
    let colors = new Values(value).all(10);
    setList(colors);
  } catch (error) {
    setError(true);
    console.log(error);
  }
};

Reactjs相关问答推荐

使用筛选器的Primereact DataTable服务器端分页?

在React Create App TS项目中安装material UI

在迭代状态时无法读取未定义的属性(读取 map )

滚动视图样式高度没有任何区别

React 在第一次渲染时为 null

面临 React 模式中点击外部条件的问题

我无法通过 useContext 显示值

如何在一个 Next.js 项目中使用两种布局?

useRef 不关注模态

未处理的拒绝 (TypeError):无法读取未定义的属性(读取协议)

文本的几个词具有线性渐变 colored颜色 - React native

为什么刷新页面时我的localStorage PET值变成空字符串?

动态添加或删除文本输入字段并将值设置为 React JS 中主要状态的数组

在 redux 中分派到另一个减少时状态值不会改变

使用输入类型文本对 useState 和日期做出react

将 Material UI 菜单渲染为

未捕获的错误:操作必须是使用 redux/toolkit 的普通对象

将 dict 值转换并插入到react 钩子的列表中

单击按钮时获取react 表中每一行的属性

useEffect 仅在跟随链接后有效,不适用于直接链接