【问题标题】:Option values inside a select with React使用 React 选择内的选项值
【发布时间】:2021-08-22 19:11:00
【问题描述】:

我是 React 的菜鸟,我想填写 <select>

我遇到的问题是当我想点击我的一项时...下拉仅在我将我的项目进行编码时显示不同的选项。这是我的代码

父组件

import React, { Fragment, useState, useEffect } from "react";
import Country from "./Country";
const CountriesList = ({ handleOnChange }) => {
  const [countriesLoaded, setCountriesLoaded] = useState(false);
  const [countriesList, setCountriesList] = useState([]);

  const getCountries = async () => {
    const api = "https://restcountries.eu/rest/v2/all";
    const response = await fetch(api);
    const countrieslst = await response.json();
    setCountriesList(countrieslst);
    setCountriesLoaded(true);
  };

  useEffect(() => {
    getCountries();
  }, [countriesList]);

  return (
    <Fragment>
      <select id="country" name="country" onChange={handleOnChange}>
        <option value="">-- Select a country --</option>

        {countriesLoaded
          ? countriesList.map((country) => (
              <Country key={country.alpha2Code} countryItem={country} />
            ))
          : null}
      </select>
    </Fragment>
  );
};

export default CountriesList;

子组件

import React from "react";
const Country = ({ country }) => {
  return <option value={country.alpha2Code}>{country.name}</option>;
};
export default Country;

如果我检查 DOM 没问题,但只显示我的第一个选项

Thnx 4 支持,祝你有美好的一天!

【问题讨论】:

标签: reactjs select option


【解决方案1】:

[编辑] 只需在您的代码中添加

这是我对您的代码也做了一些更改的链接,但这是可选的:

https://codesandbox.io/s/nd58i?file=/src/components/Form.jsx

【讨论】:

  • 为什么?如果他们愿意,像这样分离他们的逻辑似乎是完全可以接受的。如果您认为这会解决他们的问题,您能否在回答中解释为什么
  • 我认为问题出在我的数据中...我正在发出 API 请求,可能我的组件信息加载较晚
  • 我不确定幕后的确切逻辑。但是,如果您在其他组件中渲染选项,它肯定不会起作用。 |我有一个想法,尽管语法上它可能看起来正确,但选择框期望呈现选项,并且您提供了一个未正确解析的自定义组件。就像 这就是为什么只显示第一个。
  • 这对我来说很有意义,但是我该怎么解决这个问题?我应该加载我的整个组件(CountriesList.jsx)直到我的 API 请求完成吗?
  • @AntonioLabra 尝试新建议 |我更新了答案
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 2015-01-02
  • 1970-01-01
  • 2020-05-26
  • 2011-09-24
  • 2016-05-30
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多