简介
在本实验中,我们将学习如何在 React 中使用 useHash
钩子来跟踪和更新浏览器的位置哈希值。此钩子对于创建单页面应用程序非常有用,在这类应用中,页面的不同组件或部分会根据哈希值进行显示。完成本实验后,你将能够在 React 项目中实现 useHash
钩子,并提升 Web 应用程序的用户体验。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将学习如何在 React 中使用 useHash
钩子来跟踪和更新浏览器的位置哈希值。此钩子对于创建单页面应用程序非常有用,在这类应用中,页面的不同组件或部分会根据哈希值进行显示。完成本实验后,你将能够在 React 项目中实现 useHash
钩子,并提升 Web 应用程序的用户体验。
虚拟机中已提供
index.html
和script.js
。一般来说,你只需在script.js
和style.css
中添加代码。
这段代码用于跟踪和更新浏览器的位置哈希值。使用方法如下:
useState()
钩子来惰性获取 Location
对象的 hash
属性。useCallback()
钩子创建一个事件处理函数,当触发 'hashchange'
事件时更新 hash
状态。useEffect()
钩子在挂载时添加 'hashchange'
事件监听器,并在卸载时清除它。useCallback()
钩子创建一个函数,用给定的值更新 Location
对象的 hash
属性。useHash()
以获取当前的 hash
值和一个 updateHash()
函数来更改它。updateHash()
函数更改 hash
值。hash
值。hash
值。以下是代码:
const useHash = () => {
const [hash, setHash] = React.useState(() => window.location.hash);
const hashChangeHandler = React.useCallback(() => {
setHash(window.location.hash);
}, []);
React.useEffect(() => {
window.addEventListener("hashchange", hashChangeHandler);
return () => {
window.removeEventListener("hashchange", hashChangeHandler);
};
}, []);
const updateHash = React.useCallback(
(newHash) => {
if (newHash !== hash) window.location.hash = newHash;
},
[hash]
);
return [hash, updateHash];
};
const MyApp = () => {
const [hash, setHash] = useHash();
React.useEffect(() => {
setHash("#list");
}, []);
return (
<>
<p>当前哈希值:{hash}</p>
<p>编辑哈希值:</p>
<input value={hash} onChange={(e) => setHash(e.target.value)} />
</>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(<MyApp />);
请点击右下角的“上线”以在端口 8080 上运行 Web 服务。然后,你可以刷新“Web 8080”标签页来预览网页。
恭喜你!你已完成 React useHash 钩子实验。你可以在 LabEx 中练习更多实验来提升你的技能。