使用uselocation钩子的好处是什么?useLocation vs global location



你好,我正在寻找一个答案,什么是uselocation钩子的点。我正在构建我的第一个react项目。我可以很容易地达到全局位置对象和工作良好。如果我使用这个钩子,我能得到什么好处?

谢谢。

为了更普遍地回答你的问题,你必须首先理解不同之处,比如状态变量与实例变量,或者自定义React钩子与普通JavaScript函数,等等。

例子:

const foo = "bar";
// vs:
const [foo, setFoo] = useState("bar");
import fooFunc from "./fooFunc";
import useFooFunc from "./useFooFunc";
const foo = fooFunc;
// vs:
const foo = useFooFunc();

第一个例子的不同之处在于,每次你更新非状态变量foo时,React都不会意识到这个变化,所以它不会在你的组件(使用foo变量的组件)中导致重新渲染。因此,如果您希望React (React的生命周期)捕获该更改,则必须使用状态变量。在codesandbox上检查这个工作示例。

作为一般规则(非技术上的):任何与组件生命周期相关的东西都必须用React语言编写。

关于第二个例子,本质上都是一样的。fooFunc没有错,只要你不需要使用React的东西。在其中,例如,让我们说你想做一个API调用,所以你需要使用useEffect钩子(否则事情会脱离React的控制,意外的行为会随之而来),这就是为什么只要fooFunc是一个普通的JavaScript函数,React就不允许你在其中使用React钩子。在React的Hooks规则文档页面中也提到了这一点:

不要从常规JavaScript函数中调用Hooks。相反,您可以:

✅从React函数组件调用钩子。

从自定义钩子中调用钩子.

不,回到你的问题,我想你可以自己猜答案。但我还是会再解释一遍。React Router是一个使用React为React编写的库,所以为了保持事情完全同步并在这些工具的控制下,你不需要在这个过程中输入一个局外人。请记住,可以使用全局位置对象,但根本不建议这样做(除非您确切知道自己在做什么)。

最新更新