typescript - Hooks (Batched update cycle) - 语义错误 TS6133: '' 被声明但它的值从未被读取
问题描述
我正在尝试提供先前状态的函数作为参数,以便状态更新可以在单个更新周期中进行批处理,isOpen => index
但会抛出semantic error TS6133: 'isOpen' is declared but its value is never read
const initialState = -1;
const [isOpen, setOpen] = useState(initialState);
// Fails
const handleOpen = (index:number) => {
if(index !== isOpen) {
setOpen(isOpen => index);
} else {
setOpen(isOpen => initialState);
}
};
但这通过了
// Passes
const handleOpen = (index:number) => {
if(index !== isOpen) {
setOpen(index);
} else {
setOpen(initialState);
}
};
只是一头雾水,好奇吗?
解决方案
TypeScript 试图警告您,您为函数定义了一个参数,但从未使用过它。通常,编写执行此类操作的代码(忽略显式定义的参数)是错误的。
这一次,使用您的代码,这不是一个错误,而且您知道这一点。您可以通过不定义参数来修复它:
setOpen(() => index);
或者通过在参数前面加上_
,告诉 TypeScript “是的,我知道这个参数没有被使用,这不是一个错误”:
setOpen(_isOpen => index);