संपादित करें: मैं सेटअप एक codesandbox: https://codesandbox.io/s/magical-poitras-yogur?file=/src/App.tsx
मैं कोशिश कर रहा हूँ बनाने के लिए एक कस्टम हुक करने के लिए div तत्व प्रतिक्रिया में घटना को जोड़ने के लिए श्रोताओं.
मैंने पाया कि यह 'सामान्य' समाधान:
function useMyCustomHook<T extends HTMLElement>{
const myRef = useRef<T>(null)
// do something with the ref, e.g. adding event listeners
return {ref: myRef}
}
function MyComponent(){
const {ref: myElementRef} = useMyCustomHook<HTMLDivElement>()
return <div ref={myElementRef}>A Div</div>
}
से: असाइन नहीं किया जा सकता RefObject<HTMLDivElement> करने के लिए RefObject<HTMLElement> उदाहरण
जो मैं करने की कोशिश की है में लागू करने के लिए अपने कोड के नीचे. मैं खेल रहा हूँ चारों ओर एक घंटे के लिए और अंत में यह मिल गया नीचे करने के लिए केवल एक त्रुटि है, लेकिन मैं नहीं जानता कि कैसे इसे हल करने के लिए. त्रुटि में है मेरी useHover
समारोह अभिव्यक्ति पर =
. त्रुटि है: '(' expected.ts(1005)
मेरे कोड अब:
const Hooks = (props: any) => {
const [hoverRef, hovered] = useHover();
const style = {
backgroundColor: hovered ? "red" : "",
};
return (
<div ref={hoverRef} style={style}>
<h1>Hooks!</h1>
</div>
);
};
const useHover:<HTMLDivElement extends HTMLElement> = () => {
// ERROR HERE ^ the first equal sign. '(' expected.ts(1005)
const [value, setValue] = useState(false);
const ref = useRef<HTMLDivElement>(null);
const handleMouseOver = () => setValue(true);
useEffect(() => {
const node = ref.current;
if (node) {
node.addEventListener("mouseover", handleMouseOver);
return () => {
node.removeEventListener("mouseover", handleMouseOver);
}
}
}, []);
return [ref, value];
};
किसी भी मदद की सराहना की है!