Code
export default function Header(){
let showMe = false;
function toggle(){
showMe = !showMe;
}
return (
<>
<button onClick={toggle}>Toggle Subjects</button>
{/*The bottom code should toggle on and off when the button is pressed*/}
<div style={{
display: showMe?"block":"none"
}}>
This should toggle my display
</div>
</>
);
}
Expectation
The div
tag should toggle in visibility (For example, if I clicked on the button once, the div tag should show up, and if I clicked on it again it would be hidden and so on).
Reality
It appears the variable showMe
changes however the div
tag does not follow with the updates and remains hidden.
NOTE: I am using next.js if that changes anything.
Code
export default function Header(){
let showMe = false;
function toggle(){
showMe = !showMe;
}
return (
<>
<button onClick={toggle}>Toggle Subjects</button>
{/*The bottom code should toggle on and off when the button is pressed*/}
<div style={{
display: showMe?"block":"none"
}}>
This should toggle my display
</div>
</>
);
}
Expectation
The div
tag should toggle in visibility (For example, if I clicked on the button once, the div tag should show up, and if I clicked on it again it would be hidden and so on).
Reality
It appears the variable showMe
changes however the div
tag does not follow with the updates and remains hidden.
NOTE: I am using next.js if that changes anything.
Share Improve this question edited Mar 30, 2020 at 21:15 Cursor asked Mar 30, 2020 at 21:12 CursorCursor 1111 gold badge1 silver badge13 bronze badges 1- You need to you useState for that (reactjs.org/docs/hooks-state.html) – user3210641 Commented Mar 30, 2020 at 21:14
1 Answer
Reset to default 16showMe
needs to be a state variable so that React knows to rerender the component when showMe
changes. I'd read this: https://reactjs.org/docs/hooks-state.html
The code below should work (note how showMe
is replaced with a call to useState
).
export default function Header(){
const [showMe, setShowMe] = useState(false);
function toggle(){
setShowMe(!showMe);
}
return (
<>
<button onClick={toggle}>Toggle Subjects</button>
{/*The bottom code should toggle on and off when the button is pressed*/}
<div style={{
display: showMe?"block":"none"
}}>
This should toggle my display
</div>
</>
);
}
The bracket notation const [showMe, setShowMe] = useState(false);
is Array Destructuring: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
useState
returns an array of length 2. Using array destructuring, we set the first element of the returned array to showMe
and the second element of the returned array to setShowMe
.