reactjs 类型“Dispatch&lt;SetStateAction< boolean>&gt;”不可分配给类型“boolean”

ni65a41a  于 2023-05-17  发布在  React
关注(0)|答案(1)|浏览(348)

我目前正在尝试传递一个布尔值,该值是从onChange函数传递给状态变量的。

let [toggleCheck, setToggleCheck] =useState(false);`

<input type="checkbox" id={"layout_toggle"} defaultChecked={toggleCheck} onChange={toggleOnchange}></input>`

const toggleOnchange = () => {
    setToggleCheck(!toggleCheck);
}

但它不断抛出下面的错误。
Type 'Dispatch<SetStateAction<boolean>>' is not assignable to type 'boolean'.
我尝试使用document.getElementById()通过id捕获元素并使用值,但是当它们设置时,值的更改会延迟状态变量。setToggleCheck(element.checked)

zyfwsgd6

zyfwsgd61#

您遇到的错误指示toggleCheck状态变量和setToggleCheck函数之间的类型不匹配。出现这个问题是因为useState钩子返回一个包含状态变量和更新它的函数的元组,而TypeScript期望状态变量和setter函数具有匹配的类型。
要解决此问题,可以在使用useState钩子时显式指定状态变量的类型。在本例中,您希望toggleCheck为布尔值,因此可以将声明更新为:

const [toggleCheck, setToggleCheck] = useState<boolean>(false);

这确保TypeScript将toggleCheck的类型理解为布尔值,并期望setToggleCheck函数接受布尔值。
关于延迟的值更改,直接在onChange事件处理程序中使用element.checked应该可以正常工作。但是,如果您仍然遇到延迟的状态更新,您可以尝试使用setState的函数形式来保证最新的状态值。下面是toggleOnchange函数的更新版本:

const toggleOnchange = (event: React.ChangeEvent<HTMLInputElement>) => {
  setToggleCheck((prevToggleCheck) => !prevToggleCheck);
};

通过使用setToggleCheck的函数形式,可以确保状态更新基于toggleCheck的最新值。

相关问题