How To Populate Select Option Using Api
Solution 1:
The Problem:
your students object is empty before the API call and was not initialized in your setState
. so using students.map
in your select
element will cause the error (since you can't map through an undefined array).
The Answer :
There are two important things before using the map
with arrayes:
- check for the definition of the array (is the array defined and exists?)
- check its length (is the array has some content?)
First
check its declaration/definition by a simple if
statement:
{
if(myArrayOfData) {
myArrayOfData.map(
// rest of the codes ...
)
}
}
Or with using ?
shorthanded of if
{
myArrayOfData?.map(
// rest of the codes ...
)
}
Second
check for the contents of the array and use the map
function after checking its length (which tells you the data has arrived from the API call etc. and is ready to process)
{
if(myArrayOfData) {
if(myArrayOfData.length > 0) {
myArrayOfData.map(
// rest of the codes ...
)
}
}
}
Finally:
while the above snippet works properly, you can simplify it by checking both if
conditions together:
{
if(myArrayOfData?.length > 0) {
myArrayOfData.map(
// rest of the codes ...
)
}
}
Optional:
In real-world examples, you may need to show some loading components while the data is fetching.
{
if(myArrayOfData?.length > 0) {
myArrayOfData.map(
// rest of the codes ...
)
} else {
<Loading />
}
}
Be Aware
const anEmptyArray = []
if(anEmptyArray){
// rest of the codes ...
}
The result of comparison on if(anEmptyArray)
is always true
with an empty array.
Solution 2:
The option value should be _id. In your find you are comparing with student._id
but in the option the value props you passed is student.id
that's why find returns undefined
<optionkey={student._id}value={student._id}
{student.name}
</option>
Post a Comment for "How To Populate Select Option Using Api"