'Expected to return a value in arrow; function array-callback-return. Why?
I'm having some issues understanding why I'm getting a compile warning on this piece of my react code
fetch('/users')
.then(res => res.json())
.then(data => {
data.map(users => {
console.log(users);
});
});
The warning I'm getting is Expected to return a value in arrow function array-callback-return
However I'm still get the json object values from my /users
, and they are printed to the console individually. The object is:
{
id: 1,
username: "Foo"
}, {
id: 2,
username: "Bar"
}
Am I missing a return statement, or am I missing something with how map
returns values after a .then()
? I'm unclear on why the compile warning would appear at all.
Solution 1:[1]
Try Changing map(() => {}) to map(() => ())
{} - Creates a code block that expects an explicit return
statement.
With () - implicit return takes place.
Solution 2:[2]
Your specific example is:
data.map(users => {
console.log(users);
});
Where data
is the following array:
[
{id: 1, username: "Foo"},
{id: 2, username: "Bar"},
]
data.map
function (check Array.prototype.map specification) converts one array (data
in your case) to a new array. The conversion (mapping) is defined by the argument of data.map
, also called the callback function. In your case, the callback function is the arrow function users => {console.log(users);}
. The callback function of data.map
must return a value. By returning a value for each item of the array is how data.map
defines the mapping.
But in your case the callback function does not return anything. Your intention is not to do any kind of mapping, but just to console.log
. So in your case you can use data.forEach
(Array.prototype.forEach) as you don't use data.map
functionality.
NOTE: Also you should have singular (rather than plural) name for the parameter of the callback function: data.map(user => {console.log(user);});
as this parameter is set to the individual element from the old array.
Solution 3:[3]
If you don't need to mutate the array and just do the console.log() you can do data.forEach() instead. It shouldn't give you the warning. Map expects you to return a value after you've transformed the array.
fetch('/users')
.then(res => res.json())
.then(data => {
data.forEach(users => {
console.log(users);
});
});
Solution 4:[4]
From MDN:
The map() method creates a new array with the results of calling a provided function on every element in the calling array.
That means the map method has to be returned. So,you should change your code like this:
fetch('/users')
.then(res => res.json())
.then(data => {
data.map(users => {
return console.log(users);
});
});
or use forEach() instead of map()
Solution 5:[5]
it's brings this error complain when i destruction like this
{ people.map((person) => (
const [id,name,age,image] = person;
<return>
<article className='person' key={id}>
<img src={image} alt={name} />
<div>
<h4>{name}</h4>
<p>{age} Years</p>
</div>
</article>
</return>
))}
so i now do it this way without destruction and its work for me
{ people.map((person) => (
<return>
<article className='person' key={person.id}>
<img src={person.image} alt={person.name} />
<div>
<h4>{person.name}</h4>
<p>{person.age} Years</p>
</div>
</article>
</return>
))}
Solution 6:[6]
Should be a implicit return use () in place for {}.
try this
fetch('/users')
.then(res => res.json())
.then(data => {
data.map(users => (
console.log(users);
));
});
Solution 7:[7]
You can use this method mapping data map(() => ())
instead of this map(() => {})
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Mayuresh Srivastava |
Solution 2 | |
Solution 3 | Rodius |
Solution 4 | |
Solution 5 | Alebiosu Wahab Adewale |
Solution 6 | Sumit Kumar |
Solution 7 | kalpana udara |