problems with repetitive callbacks
This commit is contained in:
@@ -6,11 +6,11 @@ import PlayerCard from './components/PlayerCard';
|
|||||||
import "./styles.css";
|
import "./styles.css";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [socket, setSocket] = useState();
|
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
socket: null,
|
socket: null,
|
||||||
players: null,
|
|
||||||
id: null,
|
id: null,
|
||||||
|
players: [],
|
||||||
|
name: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -22,20 +22,22 @@ function App() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (state.socket) {
|
if (state.socket) {
|
||||||
state.socket.on('connect', (data) => {
|
state.socket.on('fire', (data) => {
|
||||||
console.log("connection to Express successful!");
|
console.log(`fire: ${data}`);
|
||||||
console.log(data);
|
if (!state.players.length || !state.players.includes(data)) setState(() => {
|
||||||
|
let newPlayers = state.players;
|
||||||
setState({
|
newPlayers.push(data);
|
||||||
...state,
|
return {
|
||||||
id: state.socket.id,
|
...state, players: newPlayers
|
||||||
players: data
|
}
|
||||||
});
|
});
|
||||||
|
});
|
||||||
// state.socket.emit('connect', null);
|
}
|
||||||
})
|
}, [state]);
|
||||||
|
|
||||||
|
const handleJoin = () => {
|
||||||
|
state.socket.emit('join', state.name);
|
||||||
}
|
}
|
||||||
}, [state.socket]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
@@ -43,8 +45,13 @@ function App() {
|
|||||||
{<h2>Your socket ID is: {state.id || ''}</h2>}
|
{<h2>Your socket ID is: {state.id || ''}</h2>}
|
||||||
{<h3>Active players: {state.players || ''}</h3>}
|
{<h3>Active players: {state.players || ''}</h3>}
|
||||||
|
|
||||||
|
<input type="text" onChange={(e) => setState({...state, name: e.target.value})} />
|
||||||
|
<button onClick={handleJoin}>Join</button>
|
||||||
|
|
||||||
<div className="players">
|
<div className="players">
|
||||||
<PlayerCard name="Me" votes={null} />
|
<div id="messages"></div>
|
||||||
|
<h3>Players:</h3>
|
||||||
|
{state.players ? state.players.map(player => <PlayerCard name={player} votes={null}/>) : null}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
32
index.js
32
index.js
@@ -13,27 +13,23 @@ const io = socketIO(server, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let players = [];
|
// for more persistent state, this could be incorporated into a database table
|
||||||
|
io.on('connection', (socket) => {
|
||||||
|
console.log(`new client connected: ${socket.id}`);
|
||||||
|
|
||||||
|
socket.on('join', (data) => {
|
||||||
|
console.log(`${data} JOINS`)
|
||||||
|
io.emit('fire', data);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
socket.on('disconnect', () => {
|
||||||
|
console.log(`player ${socket.id} disconnected`);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
server.listen(8000, (err) => {
|
server.listen(8000, (err) => {
|
||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
console.log("Listening on 8000");
|
console.log("Listening on 8000");
|
||||||
|
|
||||||
io.on('connection', (socket) => {
|
|
||||||
if (players.length === 0) players.push(socket.id);
|
|
||||||
|
|
||||||
console.log('new client connected.');
|
|
||||||
console.log(`players: ${players}`);
|
|
||||||
console.log('');
|
|
||||||
|
|
||||||
socket.emit('connection', players);
|
|
||||||
|
|
||||||
socket.on('disconnect', () => {
|
|
||||||
let found = players.indexOf(socket.id);
|
|
||||||
players = players.splice(found, 0, '');
|
|
||||||
console.log(`player ${socket.id} disconnected`);
|
|
||||||
console.log(`players: ${players}`);
|
|
||||||
console.log('');
|
|
||||||
})
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user