#javascript #reactjs #ecmascript-6 #react-hooks
#javascript #reactjs #ecmascript-6 #реагирующие перехваты
Вопрос:
У меня есть компонент, который показывает, что ни один из игроков не вошел в систему, как только компонент загружается.
function PlayerList({gamePin}){
const [playerList, setPlayerList] = useState("");
useEffect( ()=>{
axios.get("http://localhost:8080/game/lobby/" gamePin)
.then( response =>{
setPlayerList(response.data)
})
})
return(
<div className='container'>
<div className='lobbycontainer'>
<h1>Lobby</h1>
<Grid container spacing={3}>
{playerList.map(player=>{
<Player {PlayerName,PlayerId} />
})}
</Grid>
</div>
</div>
)}
экспорт списка игроков по умолчанию;
При этом будет отображено имя игрока, который вошел в систему, и всех других игроков, уже вошедших в лобби.
Но мой вопрос в том, как игроки, которые уже вошли в систему, узнают о новых игроках, которые присоединились.
Возможный подход
- Отправляйте запрос с интервалом каждые 2 секунды.
setInterval(HttpRequest, 2000);
Это правильный способ сделать это? существуют ли какие-либо альтернативные подходы?
Как компонент динамически обновляет свое состояние на основе изменений в серверной части? и реагируйте на изменения, перенастраивая компонент, чтобы отразить изменения.
Ответ №1:
Это довольно близко. Используйте шаблон «componentDidMount» useEffect
, т. Е. предоставьте пустой массив зависимостей ( []
). Преобразуйте запрос GET в функцию обратного вызова, вызываемую с интервалом, и не забудьте вернуть функцию очистки эффекта, чтобы очистить интервал, когда этот компонент отключается.
useEffect(() => {
const timerId = setInterval(() => {
axios.get("http://localhost:8080/game/lobby/" gamePin)
.then(response => setPlayerList(response.data))
}, 2000);
return () => clearInterval(timerId);
}, []);
Комментарии:
1. Спасибо, Дрю, помимо отправки запроса на серверную часть, есть ли какой-либо способ, которым интерфейс узнает об изменениях в серверной части, больше похоже на то, что я пытаюсь создать компонент, который будет меняться в зависимости от состояния сервера
2. @sivacharan Да, вроде того, но вы, по сути, спрашиваете о разнице между опросом внешнего интерфейса на наличие обновлений и серверной частью, отправляющей обновления подписанным «клиентам». Опрос — это более простой «тупой» способ, поэтому он так распространен.