#javascript #reactjs
#javascript #reactjs
Вопрос:
В настоящее время я работаю над проектом react, который включает в себя использование выпадающего списка с учетными записями. Проблема в том, что страница обновляется каждые несколько секунд, а выпадающий список очищается и на долю секунды становится пустым при этом обновлении. Есть ли способ, которым я могу это решить? Выпадающий список хорошо работает, когда параметры заданы, но в нем есть ошибки, когда я использую accounts.map для перебора каждой учетной записи. Любая помощь приветствуется!
import React from "react";
import "./style.css";
export default function App() {
let accounts = ["email1","email2","email3"];
return (
<div>
<h1>Hello StackBlitz!</h1>
<p>Start editing to see some magic happen :)</p>
<select
type="select"
name="orderState"
id="orderState"
>
{accounts.map(account => (
<option>{account}</option>
))}
</select>
</div>
);
}
Комментарии:
1. Возможно, я поторопился с ответом:
The problem is that the page refreshes every few seconds
— что это значит?2. Таким образом, страница в основном обновляет информацию из серверной части, так что, если есть какие-либо обновления или что-то еще, вам не нужно вручную перезагружать страницу. Он не перезагружает страницу полностью, а просто обновляет информацию. Проблема заключается в том, что при этом обновлении раскрывающийся список также обновляется, поэтому раскрывающийся список обновляется.
3. В этом случае вам, вероятно, просто нужно поддерживать состояние выбранного выпадающего списка, см. Мой Ответ ниже.
Ответ №1:
Вам необходимо сохранить выбранное значение в состоянии:
let accounts = ["email1", "email2", "email3"];
export default function App() {
const [selected, setSelected] = React.useState();
return (
<div>
<h1>Hello StackBlitz!</h1>
<p>Start editing to see some magic happen :)</p>
<select
type="select"
name="orderState"
id="orderState"
onChange={e => setSelected(e.target.value)}
>
<option>Select an account</option>
{accounts.map(account => (
<option selected={account === selected}>{account}</option>
))}
</select>
</div>
);
}