【发布时间】:2021-10-25 04:59:31
【问题描述】:
我在使用 React 时遇到了这个问题,我正在尝试使用存储在我的数据库中的日期呈现一个选择下拉列表。数据被成功获取并且状态也被更新,它可以被控制台记录。但是,选择下拉菜单并未按应有的方式呈现:
function Home(){
const [userdata, setUserdata] = useState();
const [historyLogs, setHistoryLogs] = useState();
useEffect(() => {
async function firstRun(){
var userdata = await (await fetch("/me")).json();
var historyLogs = []
firebase.database().ref(userdata.id).once("value", function(snapshot){
snapshot.forEach(child => {
historyLogs.push(child.key);
})});
setHistoryLogs(historyLogs);
setUserdata(userdata);
}
firstRun();
}, [])
function aver(){
console.log(historyLogs);
}
if(!userdata || !historyLogs){
return null
}
else{
return (
<React.Fragment>
<button onClick={aver}>aver</button>
<header>
<img src={logo} height="50px" alt="logo"/>
<select id="cars" name="carlist" form="carform">
<option value="volvo" selected>volvo</option>
{
historyLogs.map(log => {
return <option>{log}</option>
})
}
</select>
<div className="user-info">
<img src={userdata.img} height="50px" style={{borderRadius:"50%"}} alt="user img"/>
<p>{userdata.name}</p>
</div>
</header>
<Toptracks userdata={userdata}/>
</React.Fragment>
)
}
}
export default Home;
使用我拥有的代码,下拉菜单会在不渲染 historyLogs 列表的情况下呈现,因此它只显示以下内容:
这应该显示在里面(控制台记录):
(2) ["2021-7-25", "2022-7-25"]
我有趣地发现,如果我在本地服务器运行的情况下对代码进行任何更改,它会首先更新:
非常感谢任何帮助:)
【问题讨论】:
标签: javascript reactjs fetch use-effect use-state