【问题标题】:React hooks a functional update causes the eslint no-shadow errorReact 挂钩功能更新导致 eslint no-shadow 错误
【发布时间】:2020-01-30 00:18:28
【问题描述】:

我正在使用 React useEffect 来更新状态。 Eslint 警告我正在犯无阴影错误。我认为这与某些 eslint 或 eslint 插件设置有关,因为 CRA 不会导致相同的错误。如何解决?

function Sample(props) {
  const { flag } = props;
  const [value, setValue] = useState();

  useEffect(() => {
    if (flag) {
      setValue(value => value + 1);
    }
  }, [flag]);
}

这里,setValue(value => value + 1); 的值由于在 useState 中声明而导致无阴影。

【问题讨论】:

    标签: reactjs eslint eslint-plugin-react-hooks


    【解决方案1】:

    eslint 正确地抱怨是因为你在 useState 钩子中声明了一个 value 变量,但是你在 useEffect 中重新声明了一个名为 value另一个 变量钩子。

    最简单的解决方法是不通过更改 setValue 调用中的变量来隐藏变量名称 -

    useEffect(() => {
      if (flag) {
        setValue(prev => prev + 1);
      }
    }, [flag]);
    

    【讨论】:

    • 谢谢。我还发现从 eslint 的扩展中删除 'airbnb' 选项可以解决这个问题。
    • @SungwooPark - 是的,这可能也可以工作,但你正在削弱 linter - 它给你的警告是有效的,值得改变你的代码,否则它可能会导致意外错误!
    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多