以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - React 代码题
11. useFocus()
请参考如下代码实现:
import { useState, useEffect, useRef } from 'react';
function useFocus() {
const [isFocused, setIsFocused] = useState(false);
const ref = useRef(null);
const handleFocus = () => {
setIsFocused(true);
};
const handleBlur = () => {
setIsFocused(false);
};
useEffect(() => {
const node = ref.current;
if (node) {
node.addEventListener('focus', handleFocus);
node.addEventListener('blur', handleBlur);
return () => {
node.removeEventListener('focus', handleFocus);
node.removeEventListener('blur', handleBlur);
};
}
}, [ref]);
return [ref, isFocused];
}
function App() {
const [ref, isFocused] = useFocus();
return (
<div>
<input ref={ref} />
{isFocused && <p>focused</p>}
</div>
);
}
代码中使用了React中的Hooks, useRef()
用于获取DOM元素作为组件的引用。useState()
用于标记当前组件的焦点状态。useEffect()
用于监听节点的"focus"和"blur"事件并设置组件的焦点状态。最后组件导出ref
和isFocused
,ref
作为input的引用传递,isFocused
用于条件地渲染子组件。