首页 > 解决方案 > 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);
  }
};

只是一头雾水,好奇吗?

标签: typescriptreact-hookshook

解决方案


TypeScript 试图警告您,您为函数定义了一个参数,但从未使用过它。通常,编写执行此类操作的代码(忽略显式定义的参数)是错误的。

这一次,使用您的代码,这不是一个错误,而且您知道这一点。您可以通过不定义参数来修复它:

setOpen(() => index);

或者通过在参数前面加上_,告诉 TypeScript “是的,我知道这个参数没有被使用,这不是一个错误”:

setOpen(_isOpen => index);

推荐阅读