微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HTML Select 元素不会更改一次状态

如何解决HTML Select 元素不会更改一次状态

我正在填充一个选择选项列表,其中包含来自该 api 的提供者的数据,并且当第一次在 HTML 选择元素中选择一个选项时,这不会改变状态(返回一个 enpty 字符串)和第二次,使用第一个选定元素的值而不是第二个元素的值更改它。我想了解这一点,但没有成功。我正在使用 Typescript 和 React 钩子。

interface Country {
  name: string,translations:{
    pt: string
  },flag: string,id: number
}

interface Cards {
  id: number,countryName: string,countryFlag: string,local: string,goal: string
}

const Home: React.FC<CardProps> = ({ ...props }) => {

  const [country,setCountry] = useState<string[]>([])
  const [selectedCountry,setSelectedCountry] = useState('')
  const [countryName,setCoutnryName] = useState('')
  const [countryFlag,setCountryFlag] = useState('')
  const [local,setLocal] = useState('')
  const [goal,setGoal] = useState('')
  const [cards,setCards] = useState<Cards[]>([])
  const [cardId,setCardId] = useState<number[]>([])
  const [cardCountryName,setCardCountryName] = useState<string[]>([])
  const [cardCountryFlag,setCardCountryFlag] = useState<string[]>([])
  const [cardLocal,setCardLocal] = useState<string[]>([])
  const [cardGoal,setCardGoal] = useState<string[]>([])
  const [requestCount,setRequestCount] = useState(0)


  useEffect(() => {
    try {
      axios.get<Country[]>('https://restcountries.eu/rest/v2/all').then(response => {
        const countriesList = response.data.map(country => country.name)
        setCountry(countriesList)
      })
    } catch (error) {
      console.log(error)
    }
  },[])


  const handleSelectedCountry = (e: ChangeEvent<HTMLSelectElement>) => {
    let val = e.target.value
    setSelectedCountry(val)
  }


  const newCard = async (e: FormEvent) => {

    e.preventDefault()


      await axios.get<Country[]>(`https://restcountries.eu/rest/v2/name/${selectedCountry}`)
        .then(response => {
          const transalations = response.data.map(item => item.translations.pt)
          const { flag } = response.data[0]
          console.log(response.data[0])
          setCountryFlag(flag)
          setCoutnryName(transalations[0])
          console.log(countryName)  //HERE countryName = '' for the first request
         // and returns the value of the first request in the second request
         
        })
        
        
        if(countryName){

          const id = cards.length + 1
          const newLocal = local
          const newGoal = goal
          
          await axios.post('http://localhost:3333/cards',{
            "id": id,"countryName": countryName,"countryFlag": countryFlag,"local": newLocal,"goal": newGoal
          }).then(response => console.log(response))
          console.log(countryFlag)
          console.log(countryName)
        }
  
      const resetForm = document.querySelector('form')
      resetForm?.reset()
  
      setSelectedCountry('')
      setGoal('')
      setLocal('')
      setRequestCount(requestCount + 1)
    }

  }

  return (

    <div>
    <form>
    <select name='country'
              id='country-name'
              onChange={handleSelectedCountry}
            >
              <option placeholder="Selecione um país">Selecione um país</option>
              {country.sort().map((item,index) => (
                <option key={index} value={item}>{item}</option>
              ))}
     </select>
     <button type='submit' onClick={newCard}/>
     </form>
    </div>
)
}```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?