我使用它已经有一段时间了,研究useRef和forwardRef只是为了能够将跳过导航链接添加到我的Reaction项目中.因为多个来源都说ElementByID和querySelector不是正确的方法,所以我最终将一个引用转发到我的所有路由.然后,在每一页上,我将引用进一步转发到引用主组件.对于一个小的可访问性功能来说,这一切似乎都是一个巨大的复杂问题.
const App = () => {
const beginningOfMainRef = useRef(null);
const handleFocusMain = () => beginningOfMainRef.current.focus();
return (
<Theme>
<GlobalStyle />
<SkipNavigationButton onClick={handleFocusMain}>
Skip Navigation Links
</SkipNavigationButton>
<Header />
<Routes>
<Route path="/" element={<HomePage ref={beginningOfMainRef} />} />
<Route
path="/distributors"
element={<DistributorsPage ref={beginningOfMainRef} />}
/>
<Route
path="/contacts"
element={<ContactsPage ref={beginningOfMainRef} />}
/>
</Routes>
<Footer />
</Theme>
);
};
export default App;
比每一页都要多:
const AboutPage = forwardRef((props, ref) => {
return (
<RefMain ref={ref}>
<h1>hi, i'm about</h1>
</RefMain>
);
});
export default AboutPage;
最后是:
const RefMain = forwardRef((props, ref) => {
return (
<Main>
<BeginningOfMain tabIndex="-1" ref={ref}>
{props.title} main content
</BeginningOfMain>
{props.children}
</Main>
);
});
export default RefMain;
这当然是一个简化的例子,页数减少了.看着裁判通过的路由,他们什么都不是,而不是枯燥的.我是不是错过了什么绝妙的把戏?我try 在RefMain组件中使用useRef,但这使我无法将引用传递给树中更高的处理程序函数(App.js).