reactjs 如何在select选项中显示数据库中的数据?

1mrurvl1  于 2022-11-29  发布在  React
关注(0)|答案(2)|浏览(259)

我可以成功地从数据库中获取数据,但如何在Select中显示数据?
这是我希望在select中显示数据的位置。

<Select
    fullWidth
    value={newUsers}
    onChange={handleChange}
>
<MenuItem value={0}>{newUsers.label}</MenuItem>

这是我从数据库调用数据的方式(这是工作的,我可以从我的控制台看到数据)

const [newUserLists, setNewUserLists] =useState([]);
  const newUsers= [];
  const fetchData = async () => {
    const response = await getreason();
    response.data.map(function(u){
      newUsers.push({
         label: u.applicationcode,
         value: u.applicationid
      })
    })
    setNewUserLists(newUsers)
  }
  useEffect(() => {
    fetchData();
  }, [reRender]);

这是console.log中的结果

fkaflof6

fkaflof61#

让我们在Material-UI Select tutorialAPI doc page上对此进行建模。

  • value是当前选择的输入值。您似乎试图将其设置为从DB响应中读取的对象列表,这是不正确的。通常的做法如下:
const [selected, setSelected] = useState("");

  const handleChange = (event) => {
    setSelected(event.target.value);
  };

  return (
    <FormControl>
      <InputLabel>Selection</InputLabel>
      <Select
        value={selected}
        onChange={handleChange}
      >
        {/* MenuItems go here */}
      </Select>
    </FormControl>
  );
  • 在一个不相关的(与Material-UI)注意事项中,您似乎没有在代码中实际使用newUserLists。我将假设newUsers只是一个占位符,用于将响应中的数据放入其中,但根据@Naim-Mustafa的回答,它不需要,也不应该在您的显示中使用。
  • 现在,我们如何使用newUsersList来生成MenuItem的列表呢?就像您在其他地方所做的那样,map是关键:
{newUsersList.map(({ label, value }) => (
          <MenuItem id={value} value={value}>
            {label}
          </MenuItem>
        ))}

请注意,我假设value对于id字段是唯一的,如果不是,请替换为更合适的值。

mwecs4sa

mwecs4sa2#

您可以将const newUsers= [];更改为let newUsers= [];
但您根本不必使用newUsers数组,而是尝试使用state

const [newUserLists, setNewUserLists] =useState([]);
const [selectedOption, setSelectedOption] = useState();
  const fetchData = async () => {
    const response = await getreason();
    
    setNewUserLists(response.data.map(user => ({
         label: user.applicationcode, 
         value: user.applicationid})))
  }
  useEffect(() => {
    fetchData();
  }, [reRender]);

return (
<>
       <select value={selectedOption}
         onChange={(event) => setSelectedOption(event.target.value)}
         >
         {newUserLists
                 .map(user => 
                <option key={user.label} value={user.label}> 
                {user.label}</option>}
        </select>
</>

相关问题