我目前正在尝试传递一个布尔值,该值是从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)
1条答案
按热度按时间zyfwsgd61#
您遇到的错误指示
toggleCheck
状态变量和setToggleCheck
函数之间的类型不匹配。出现这个问题是因为useState
钩子返回一个包含状态变量和更新它的函数的元组,而TypeScript期望状态变量和setter函数具有匹配的类型。要解决此问题,可以在使用
useState
钩子时显式指定状态变量的类型。在本例中,您希望toggleCheck
为布尔值,因此可以将声明更新为:这确保TypeScript将toggleCheck的类型理解为布尔值,并期望setToggleCheck函数接受布尔值。
关于延迟的值更改,直接在onChange事件处理程序中使用element.checked应该可以正常工作。但是,如果您仍然遇到延迟的状态更新,您可以尝试使用setState的函数形式来保证最新的状态值。下面是
toggleOnchange
函数的更新版本:通过使用setToggleCheck的函数形式,可以确保状态更新基于toggleCheck的最新值。