I have the following snippet in a React component. This is a trivial example, but I'm trying to better my understanding of the this keyword and its context
const NAVBAR_ITEM_TITLES = ["Home", "About", "Contact"];
function makeNavbarItems() {
return NAVBAR_ITEM_TITLES.map(item => ({
title: item,
handleButtonClick() {
console.log(`clicked the ${this.title} button`);
},
}));
}
const Navbar = () => {
const navbarItems = makeNavbarItems();
return (
<>
{navbarItems.map(item => (
<div>
<button key={item.title} onClick={item.handleButtonClick}>
{item.title}
</button>
</div>
))}
</>
);
};
I wrote a small function that returns some anonymous objects to populate a navbar. However, the this context inside the anonymous object that map returns is undefined. I understand that if I create a named object like myObj then I may access the title property such as myObj.title, but I'd like to gain understanding of what I'm doing wrong and how to fix it.
Cheers.
CodePudding user response:
You already have access to the item string, which you're aliasing it as title: there is no need to use this at all:
function makeNavbarItems() {
return NAVBAR_ITEM_TITLES.map(item => ({
title: item,
handleButtonClick() {
console.log(`clicked the ${item} button`);
},
}));
}
CodePudding user response:
this always refer to the object in the current context, and in this case, the new object you are creating with your prototype. As @Terry said, it's not really necessary here. In some case, you will need this to differentiate between two expression with the same name but on different scope. (e.g. A global variable and a local one of the same name).
