I want to access the id of the div
element, for this I use parentElement
twice and I think it is not a good thing and I am looking for a better way because if the div
element is at higher levels, I have to use parentElement
several times, which apparently is not the right thing to do. Can you guide me in a better way to access any element I want at any level?
https://codesandbox.io/s/sharp-dijkstra-4yw07r?file=/src/App.js:0-377
export default function App() {
function handleGetId(e) {
console.log(e.target.parentElement.parentElement.id);
}
return (
<div style={{ textAlign: "center" }} id="1">
<div>
<h1>Hello</h1>
<h2>The output is in the console</h2>
</div>
<div>
<button onClick={handleGetId}>Click Me !</button>
</div>
</div>
);
}
CodePudding user response:
You can rely on useRef
hook and add a ref={...}
attribute to the element you want.
import { useRef } from "react";
export default function App() {
const itemWithIdRef = useRef(null);
function handleGetId(e) {
console.log(itemWithIdRef.current.id);
}
return (
<div ref={itemWithIdRef} style={{ textAlign: "center" }} id="1">
<div>
<h1>Hello</h1>
<h2>The output is in the console</h2>
</div>
<div>
<button onClick={handleGetId}>Click Me !</button>
</div>
</div>
);
}
But the purpose of that code is questionable. You can just use
onClick={() => handleGetId(1)}
for example, and just pass the id you want as a parameter. Or pass a state variable in same way.