【发布时间】:2020-08-21 14:20:05
【问题描述】:
我正在尝试设置一个显示按钮列表的反应应用程序,用户可以按下按钮并被带到包含有关国家/地区信息的页面。我正在使用.map 函数以编程方式创建按钮。我正在使用 SQL 数据库来存储国家/地区名称和有关国家/地区的信息,然后调用烧瓶路由将数据提取到我的反应应用程序中。为此,我使用了async 函数。
这是我希望发生的过程:
我在我的 App.js 主路由器组件中设置了一些有状态变量。然后,我将 setState 函数作为道具传递给带有按钮和 .map 函数的组件。对于每个按钮,都可以选择在 App.js 组件中设置变量的状态。然后,我会将 App.js 中的变量设置为与单击的按钮关联的值。从那里,我可以将这些状态变量传递给我的国家页面组件进行显示。
实际发生的情况:
我将道具传递给我的国家组件,期望一个国家和国家的详细信息随之传递,但我最终得到undefined。看起来 undefined 可能是数据集的最后一个元素,因为我之前得到了津巴布韦的结果。这是我的 App.js 路由器代码:
export default function App() {
const [cname, setCName] = useState('')
const [pdf, setPdf] = useState('')
const [details, setDetails] = useState('')
return (
<div className="App">
<BrowserRouter>
{/* <Route exact path="/" component = { Home }/> */}
<Route path="/cia" component = {(props) => <CIALanding {...props} setCName={setCName} setPdf={setPdf} setDetails={setDetails}/>}/>
<Route path="/country" component={(props) => <Country {...props} setCName={setCName} details={details} cname={cname}/>}/>
<Route path="/countrypage" component={CountryPage}/>
</BrowserRouter>
</div>
);
}
这是我的登录页面的代码(使用.map 函数)
export default function CIALanding(props) {
const [countriesList, setCountriesList] = useState([])
const getCountries = async () => {
const response = await fetch('http://127.0.0.1:5000/countries');
const data = await response.json();
setCountriesList(data['country_list'].map((country) => {return (
<Link to={{pathname:'/country',
}}>
<Country cname1={country[0]} details={country[2]} setCName={props.setCName}>{country[0]}</Country>
</Link>
)}))
}
useEffect(() => {
getCountries()
},[])
return (
<div>
{countriesList}
</div>
)
}
这是我的 Country 组件代码
export default function Country(props) {
return (
<div>
{console.log(props.cname)}
<Button onClick={props.setCName(props.cname1)}>{props.cname1}</Button>
</div>
)
}
非常感谢您的帮助!
【问题讨论】: