0

I have a list app. I want its item to populate in MenuItem. I tried the following:-

{app.map((item, index)=>{
       <MenuItem value={item}>{item}</MenuItem>
})}

but I'm getting this error:-

Expected an assignment or function call and instead saw an expression

console.log(item) shows [ "NE", "NO" ]
console.log(app) shows [ [ "" , "", "" ], [ "NE", "N)" ] ]

5
  • what value in app ? Commented Dec 3, 2021 at 6:38
  • try adding return before <MenuItem value={item}>{item}</MenuItem> Commented Dec 3, 2021 at 6:38
  • 1
    remove the comma , after console.log Commented Dec 3, 2021 at 6:39
  • 3
    You should return MenuItem from map Commented Dec 3, 2021 at 6:39
  • return MenuItem and add key also in the map function to avoid warning. Commented Dec 3, 2021 at 6:41

2 Answers 2

2

You need to return something from map, In your case you have to return MenuItem as

Live Demo

Codesandbox Demo

Below will implicitely return the MenuItem

{
  app.map((item, index) => <MenuItem value={item}>{item}</MenuItem>);
  // without { and }
}

or You can explicitly return the MenuItem

{
  app.map((item, index) => {
    console.log(item);
    return <MenuItem value={item}>{item}</MenuItem>;
  });
}

EXPLANATION

Since, you are using map here which should be used if we want to map over the array and return something from it and map will return an array of elements and what you want is to map over the app array and return MenuItem elements because whatever you will return from map will eventually become React children.

return (
        <div>
            {app.map((item, index) => {
                (
                    <MenuItem value={item} key={item}>
                        {item}
                    </MenuItem>
                );
            })}
        </div>
    );

Above code snippet gets converted to

return /*#__PURE__*/React.createElement("div", null, app.map((item, index) => {
    /*#__PURE__*/
    React.createElement(MenuItem, {     // NOTICE, you are not
      value: item,                      // returning any React
      key: item                         // Elements from here
    }, item);
  }));

So, you should return from map

Sign up to request clarification or add additional context in comments.

1 Comment

Might be useful to add what the difference is between implicit/explicit returns are.
1

2 Issue

  1. console.log(item), to console.log(item); // comma to semicolon
  2. <MenuItem value={item}>{item}</MenuItem > to return <MenuItem value={item}>{item}</MenuItem> // need to return

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.