reactjs - 使用 bool 值的 useState

标签 reactjs react-hooks next.js

我有一个 React next.js 项目和一个表单。我想在我的表单中使用 slider 。顺便说一句,我使用语义 ui react 。我有一个具有以下输入的 useState Hook :

function CreateTicket() {
  const [ticket, setTicket] = useState({
    name: "",
    description: "",
    media: "",
    priority: false
  });
....

还有一个 handleChange、handleSubmit 和一个 handleToggle 函数。当我在 console.log 中提交表单时,它不会将优先级的值设置回 false。

      <Checkbox
        style={{ padding: "1rem" }}
        label="Important?"
        name="priority"
        toggle
        onChange={handleToggle}
      />

  const handleToggle = event => {
    let { priority } = event.target;
    setTicket(prevState => ({ ...prevState, priority: !priority }));
  };

控制台日志 ->

页面刷新后:

{name: "", description: "", media: "", priority: false}

之后:切换

{name: "", description: "", media: "", priority: true}

第二次切换后

{name: "", description: "", media: "", priority: true}

我做错了什么?

最佳答案

你需要解构priority来自 prevState , 不是 event.target :

const handleToggle = event => {
  setTicket(({ priority, ...prevState }) =>
    ({ ...prevState, priority: !priority })
  );
};

作为优化,您可以内存 handleToggleuseCallback()这样<Checkbox/>不需要每次状态更新时都重新渲染:

const handleToggle = useCallback(event => {
  setTicket(({ priority, ...prevState }) =>
    ({ ...prevState, priority: !priority })
  );
}, [setTicket]);

关于reactjs - 使用 bool 值的 useState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961954/

相关文章:

javascript - CRA 环境变量中的 npmject 收到 undefined 后

reactjs - 什么是 Apollo 中的片段匹配器

reactjs - 我应该依赖 react useEffect hook 的依赖列表检查吗?

javascript - 如何在标题组件中使用效果(ReactJS/Next.js)

javascript - 如何解决 react 原生 EventEmitter 监听器警告

javascript - 将 React 组件拆分为单独的文件

reactjs - 使用下一个 js 动态导入有条件地导入模块,SSR 不起作用

next.js - 我可以让 Next.Js 在构建期间排除 .babelrc 吗?

html - 在React中使用callback ref修改scrollLeft属性

javascript - 使用 React Hooks 和 Ant Design 上传文件