There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply () below.
If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.
Join the Discussion. Help a fellow learner on their journey.
Ask or answer a question about this exercise by clicking reply () below!
You can also find further discussion and get answers to your questions over in Language Help.
Agree with a comment or answer? Like () to up-vote the contribution!
useEffect( ) still works the same if you put it in a certain place, but you must always put useEffect( ) before the return keyword. Here are some rules of Hooks you need to know in React: https://reactjs.org/docs/hooks-rules.html
calling useEffect() after handleClick doesn’t violate any rules as per the ‘docs’, but the test does flag that as an error.
there may be some other reason for that…
This is a really simple question and im probably forgetting a basic concept somewhere but how come for question 2 of this exercise, useEffect(()=>alert({count}))
doesnt work…and you have to put alert in curly brackets? useEffect(()=>{alert({count})})
Is it because alert() is a javascript function and anything returned from a javascript function must be within curly brackets? I think I read that somewhere but I cant really remember for sure.
And if that’s the case shouldnt we be putting a curly bracket around the entire arrow function? Like: useEffect({()=>alert({count})})
since the arrow function is a javascript function.
This is because the callback parameter of the useEffect() function must not return a value.
When you run useEffect(()=>alert({count})) you are returning alert() to useEffect(). This way works since alert() returns undefinded, but it doesn’t make sense.
useEffect(()=>alert({count})) is the same as writing
So it turns out that useEffect() is triggered first, and only then the component is rendered?
Since in the alert we see the message “Count: 3”, but on the page there is still 2.
I was having a hard time understanding how the name variable was going to stay in scope inside the Effect Hook callback () => {document.title = `Hi, ${name}`;} once the PageTitle function Component was finished executing. I know that scoping of inner functions was covered earlier in the Career Path, however, I’m not remembering the lesson fully.
To anybody else with confusion, although dense, this resource documents the concept: Closures - JavaScript | MDN
function makeFunc() {
const name = "Mozilla";
function displayName() {
console.log(name);
}
return displayName;
}
const myFunc = makeFunc();
myFunc();
…functions in JavaScript form closures. A closure is the combination of a function and the lexical environment within which that function was declared. This environment consists of any local variables that were in-scope at the time the closure was created. In this case, myFunc is a reference to the instance of the function displayName that is created when makeFunc is run. The instance of displayName maintains a reference to its lexical environment, within which the variable name exists.