作者回复: 👍🏻
作者回复: 你好,学习的很认真哈,官方文档通常是最好的掌握好基础概念最全面的方式。eslint 插件的目的主要是帮助你发现可能的错误。但是 deps 的本质在于确保callback 里需要用到的变量在变化时保证重新执行。所以这个逻辑只要你自己非常确定不出错就可以了。eslint 只是起一个辅助判断的作用。对于这种情况,你完全可以加一个注释: // eslint-disable-line 让 eslint 忽略这个检查。你自己来决定这个代码是不是正确的逻辑。因为本质上,无论怎么写,语法上都是正确的。
作者回复: 1. 正确 2. 没必要的原因在于 React 知道 setBlogContent 是永远不会变的,因为是 useState 中返回的。所以可以忽略。 3. 是的,很好的提示。如果在 useEffect 中要使用,可以用函数作为 set 方法的参数,比如 setSomeState(prevState => newState)
作者回复: 1. 不指定依赖的话,就每次执行。不只是性能问题,有可能会产生 bug,比如不停的产生副作用发请求给后端。第二点对的,漏掉的话会导致依赖变化时副作用不执行。 2. 不需要的原因在于 React 知道 setBlogContent 确定是不会变的。这是 useState 的机制决定的,React 和 ESLint 插件都知道,所以写不写都是一样的,可以忽略。
作者回复: setState 时内部是通过引用比较两次值是否发生了变化,所以一定要用 immutable 的方式,也就是每次创建新对象来修改值,比如 setState({...oldState, aa: 2})。
作者回复: useState 能够保证 setBlogContent 每次都是同一个函数,所以无需作为依赖项。
作者回复: useEffect 是副作用,一定要记住语义,副作用的逻辑才需要用在 useEffect 中。而且 useEffect 是在 render 后执行。函数体是和当前 render 结果相关的逻辑。
作者回复: 没有,JS 此类函数的垃圾收集效率是非常高的,可以忽略。
作者回复: 在函数内部的变量都是局部变量。只是这个变量每次被赋予的值来自的 hook 保证它的值每次都不变。
作者回复: 因为这样就需要维护源state 和目标 state 的一致性,会带来各种复杂度,后面课程有介绍