javascript - 使用 useState 清除字段

标签 javascript reactjs

我有一个表单,提交后需要清除输入字段。

我正在使用 useState 并在我的 addNewColor 方法中,我正在重置 newName 状态以返回到空字符串。初始状态是一个空字符串,所以我想我只需调用 setName(newName) 因为这是我的初始状态,但它不起作用。我知道有某种方法可以使用 prevState,但我还没有完全理解它。对于令人困惑的总结,我深表歉意。

简而言之,我只是想清理这个领域。我正在使用 Material UI,名称位于 TextValidator 组件内。

const NewPaletteForm = () => {
  const [currentColor, setColor] = useState("teal");
  const [colors, setColors] = useState([]);
  const [newName, setName] = useState("");

  function addNewColor() {
    const newColor = {
      color: currentColor,
      name: newName
    };

    const resetName = {
      name: ""
    };

    setName(newName, resetName);
    setColors([...colors, newColor]);
  }

  function handleChange(event) {
    setName(event.target.value);
  }
};

<ValidatorForm onSubmit={addNewColor}>
  <TextValidator
    value={newName}
    onChange={handleChange}
    validators={["required", "isColorNameUnique", "isColorUnique"]}
    errorMessages={[
      "Enter a color name",
      "Color name must be unique",
      "Color is already used"
    ]}
  />
  <Button
    variant="contained"
    type="submit"
    color="primary"
    style={{ backgroundColor: currentColor }}
  >
    Add Color
  </Button>
</ValidatorForm>;

最佳答案

我认为您误解了 useState Hook 。

从 useState 返回的数组如下所示:['currentValue', 'methodToSetValue']

因此,要重置名称,您只需调用 setName(""),这会将当前值设置为“”。

如果您需要以前的值(例如不是清除而是更新),您可以将一个函数传递到 setName 中:

setName(prevName => prevName+' Surname');

这会将Surname 附加到当前姓名。

关于javascript - 使用 useState 清除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709978/

相关文章:

javascript - 事件处理程序的幕后情况是怎样的?它适用于其他功能吗?

javascript - 如何使用 JSX 样式指定自定义鼠标光标

javascript - Angular 5 TypeScript——包括 ES2015 代码

javascript - 将对象附加到 HTML

javascript - 在 WebDriverJS 中删除 cookie

javascript - Array.push() 使所有元素在推送对象时都相同

javascript - 通过首先存储在变量中然后正确格式化来将代码字符串添加到我的 html 中?

javascript - 单击图标时如何打开每个项目的 Accordion ?

html - 如何使输入表单只有数字

javascript - 使用 javascript 开始时允许使用 mm/dd/yyyy 格式的 0 表示月份