onChange 不更新 React

IT技术 reactjs axios
2021-05-03 10:31:24

过去几个小时我一直在为这个项目工作,我很确定这最后一个小时将是我的最后一个小时。没有出现错误。我的想法是,当我从下拉列表中选择一个英雄时,页面会根据我的选择进行更新。我可能有一些我没有注意到的没有触发的东西。

import React, {useEffect, useState} from 'react'
import axios from 'axios'
require("regenerator-runtime/runtime");

const App = () => {
    const [hero, selectedHero] = useState(
        'Select a Hero'
    );
    const handleChange = event => selectedHero(event.target.value);
    return(
        <HeroSelect heroSelect={hero} onChangeHeadline={handleChange} />
    );

};
const HeroSelect = ({heroSelect, onChangeHeadline}) => {
    const [data, setData] = useState({heroes: []});
    useEffect(() => {
        const fetchData = async () => {
            const result = await axios(
                'https://api.opendota.com/api/heroStats',
            );
            setData({...data, heroes: result.data});
        };
        fetchData();
    }, []);
    return (
        <div>
            <h1>{heroSelect}</h1>
            <select>
                {data.heroes.map(item => (
                    <option key={item.id} value={heroSelect} onChange={onChangeHeadline} >
                        {item.localized_name}
                    </option>
                ))}
            </select>
        </div>
    )
};
export default App
4个回答

定义你onChange={onChangeHeadline}Select标签而不是option标签

         <select onChange={onChangeHeadline}>
           {data.heroes.map(item => (
            <option key={item.id} value={item.localized_name}>
             {item.localized_name}
            </option>
            ))}
         </select>

您应该onChangeselect标签本身触发您的事件

<select onChange={onChangeHeadline} >
.....
.....
</select>

我想你没有在选择上声明一个 onChange 。

使用此方法:

<select id="lang" onChange={this.change} value={this.state.value}>
<option value="select">Select</option>
<option value="Java">Java</option>
<option value="C++">C++</option>
</select>