拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 ReactuseStatesetter不适用于布林值

ReactuseStatesetter不适用于布林值

白鹭 - 2022-03-04 2026 0 0

我尝试使用钩子中的设定器更新状态值useState,但它不会更新。相同的设定器在将值设定为 true 时在不同的函式中作业。

为了确保函式呼叫是正确的,我尝试更新与错误函式不同的状态并且它可以作业!

我一直在琢磨为什么那个特定状态没有更新为布尔假值。

const initialFormState = {
  0: { a: null, b: 0.0, c: 0.0 }
};
const [form, setForm] = useState(initialFormState);
const [fileUploadModal, setFileUploadModal] = useState(false);

function openFileInput() {
  setFileUploadModal(true);  // this works fine
}

function closeFileInput() {
  setFileUploadModal(false);   // this doesn't update
  setForm(initialFormState);   // this works fine as well
  console.log(fileUploadModal, form);
}

进行完整性检查:

useEffect(() => {
  console.log('File open state modified', fileUploadModal);
}, [fileUploadModal]);

这没有更新,证明状态设定器存在一些问题。

uj5u.com热心网友回复:

听起来像setstate-doesnt-update-the-state-immediatelySetter 作业正常,你必须知道它setFileUploadModal是异步的,你可以在useEffect. 例子:

const initialFormState = {
    0: { a: null, b: 0.0, c: 0.0 }
  };
  const [form, setForm] = useState(initialFormState);
  const [fileUploadModal, setFileUploadModal] = useState(false);

 function openFileInput() {
    setFileUploadModal(true); 
  }

  function closeFileInput() {
    setFileUploadModal(false);
    setForm(initialFormState);
  }

useEffect(() => {
   console.log(fileUploadModal);
}, [fileUploadModal])

uj5u.com热心网友回复:

很抱歉这个问题,但问题是由于模板问题,点击也触发了将值设定为 true 的功能。出现混乱是因为没有呼叫状态更新 useEffect,这导致我进行了不同的调查。真正的问题是 btn 点击没有正确传播。

感谢大家的帮助!

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *