Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Populate React MUI dropdown list with dynamic data from axios Get request


import { useEffect, useState } from "react";

import Box from "@mui/material/Box";
import FormControl from "@mui/material/FormControl";
import InputLabel from "@mui/material/InputLabel";
import MenuItem from "@mui/material/MenuItem";
import Select from "@mui/material/Select";

const DropdownList = (props) => {
  const [course, setCourse] = useState("");

  const handleChange = (event) => {
    setCourse(event.target.value);
    // props.onSelectedCourse(event.target.value);
  };

  return (
    <div>
      <Box sx={{ minWidth: 120 }}>
        <FormControl fullWidth>
          <InputLabel id="inputId">Select Courses</InputLabel>
          <Select
            id="demo-simple-select"
            labelId="inputId"
            value={course}
            label="Select Courses"
            onChange={handleChange}
          >
            {props.content.df?.map((name) => {
              <MenuItem value={name.course}>{name.course}</MenuItem>;
            })}
          </Select>
        </FormControl>
      </Box>
    </div>
  );
};

export default DropdownList;

I am trying to display dynamic data into react MUI dropdown list. However, no data is shown in the dropdown list. The props passed to the DropdownList component is from a smart component name DropdownSmart which gets the HTTP request as shown below.

import React, { useEffect, useState } from "react";

import DropdownList from "../components/dropdown/DropdownList";
import axios from "axios";

const DropdownSmart = () => {
  const [content, setContents] = useState({});

  useEffect(() => {
    axios.get("http://localhost:5000/getCourses").then((res) => {
      //   let a = res.data.df;
      //   setContents(a);
      console.log(res.data);
      setContents(res.data);
    });
  }, []);

  return <DropdownList content={content}></DropdownList>;
};

export default DropdownSmart;

The data get from the http request is in JSON format as shown below

{
  "df": [
    {
      "course": "Data Warehouse Fundamentals"
    },
    {
      "course": "Hadoop"
    },
    {
      "course": "Java"
    },
    {
      "course": "Linux"
    },
    {
      "course": "On-Job Project 1"
    },
    {
      "course": "On-Job Project 2"
    },
    {
      "course": "Python Basics"
    },
    {
      "course": "Python OOPS"
    },
    {
      "course": "Soft Skills Upskilling"
    }
  ]
}

The issue is that nothing is shown in the dropdown list. Would really appreciate it if anyone could help a newbie out here. Thanks in advance!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You are not returning anything from inside map which is explicit return and it returns undefined as a result

You can read this blog – Implicit & Explicit return in JS

{props.content.df?.map((name) => {
    return <MenuItem value={name.course}>{name.course}</MenuItem>; //here
 })}

or just do implicit return as below (just by removing the braces and replacing with paranthesis 😉)

{props.content.df?.map((name) => (
   <MenuItem value={name.course}>{name.course}</MenuItem>;
))}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading