语义UI React:无法从REST API中获取值作为下拉菜单

问题描述 投票:2回答:1

我正在尝试使用语义UI React的Dropdown元素。它旨在与允许获取电影列表的REST API配合使用。已将React配置为从适当的REST API应用程序中获取数据(这已经适用于前端的其他元素)。

我想获得电影名称列表作为选项。请查看以下JS代码段。

import React, { useState, useEffect } from "react";
import { Dropdown } from "semantic-ui-react";

export const MovieDropdown = () => {
  const [movie, setMovie] = useState("");
  const [movieOptions, setMovieOptions] = useState([]);

  useEffect(() => {
    fetch("/movies")
      .then((response) => response.json())
      .then((data) =>
        setMovieOptions(
          data.map((x) => {
            return { key: x.name, text: x.name, value: x.name };
          })
        )
      );
  }, []);

  return (
    <Dropdown
      placeholder="Select Movie"
      search
      selection
      options={movieOptions}
      onChange={(e) => setMovie(e.target.value)}
    />
  );
};
export default MovieDropdown;

我无法从https://react.semantic-ui.com/modules/dropdown/#usage-remote中弄清楚。

javascript reactjs semantic-ui-react
1个回答
1
投票

您的代码看起来不错。更改一件小事,它将起作用:

onChange={e => setMovie(e.target.value)} // you cannot use event in setState. furthermore checkout the second param of the onChange-Event

to

onChange={(e, {value}) => setMovie(value)}

结帐fixing-react-warning-synthetic-events-in-setstate

这是完整的工作代码

import React, { useState, useEffect } from "react";
import { Dropdown } from "semantic-ui-react";

export const MovieDropdown = () => {
  const [movie, setMovie] = useState("");
  const [movieOptions, setMovieOptions] = useState([]);

  useEffect(() => {
    fetch("/movies")
      .then((response) => response.json())
      .then((data) =>
        setMovieOptions(
          data.map((x) => {
            return { key: x.name, text: x.name, value: x.name };
          })
        )
      );
  }, []);

  return (
    <Dropdown
      placeholder="Select Movie"
      search
      selection
      options={movieOptions}
      onChange={(e, {value}) => setMovie(value)}
    />
  );
};
export default MovieDropdown;
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.