Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

252
Views
Obtener datos de WebSocket React

Obtengo datos de un Websocket en un Componente:

 function Data() { const [price, setPrice] = useState(""); const [date, setDate] = useState(""); const ws = new WebSocket( "wss://stream.tradingeconomics.com/?client=guest:guest" ); const subscription = { topic: "subscribe", to: "EURUSD:CUR" }; const initWebsocket = () => { ws.onopen = () => { console.log("Connection Established!"); ws.send(JSON.stringify(subscription)); }; ws.onmessage = (event) => { const response = JSON.parse(event.data); setPrice(response.price.toFixed(3)); let today = new Date(response.dt * 1); const options = { year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", }; let date = today.toLocaleDateString("en-EN", options); setDate(date); //ws.close(); }; ws.onclose = () => { console.log("Connection Closed!"); //initWebsocket(); }; ws.onerror = () => { console.log("WS Error"); }; }; useEffect(() => { initWebsocket(); // cleanup method which will be called before next execution. in your case unmount. return () => { ws.close(); }; }, []); // useEffect(() => { // setTimeout(initWebsocket(), 10000); // }, []); return ( <div> Price : {price} Last Update: {date} </div> ); } export default Data;

Dos preguntas sobre esto:

  1. con este código, en algún momento obtengo el error de recursos insuficientes, pero los datos aún se recuperan... No sé por qué. 2) si uso el useEffect comentado, todavía obtengo datos del socket web además del setTimeout ... ¿Cómo puedo obtener datos solo cada 10 segundos?
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

puede usar setInterval para ejecutar un bloque de código dentro de un período definido.

 setInterval(()=>{your function}, 10000)

Esta fue solo la respuesta a su última pregunta. Si desea ejecutar un código periódicamente, setInterval es su tipo.

Edité un poco tu código en code sandbox:

 import "./styles.css"; import { useState, useEffect } from "react"; export default function App() { const [price, setPrice] = useState(""); const [date, setDate] = useState(""); const subscription = { topic: "subscribe", to: "EURUSD:CUR" }; useEffect(() => { const ws = new WebSocket( "wss://stream.tradingeconomics.com/?client=guest:guest" ); ws.onopen = () => { console.log("Connection Established!"); ws.send(JSON.stringify(subscription)); }; ws.onmessage = (event) => { const response = JSON.parse(event.data); console.log(response); if (response.topic === "EURUSD") { setPrice(response.price.toFixed(3)); let today = new Date(response.dt * 1); const options = { year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }; let date = today.toLocaleDateString("en-EN", options); setDate(date); } //ws.close(); }; ws.onclose = () => { console.log("Connection Closed!"); //initWebsocket(); }; ws.onerror = () => { console.log("WS Error"); }; return () => { ws.close(); }; }, []); // useEffect(() => { // setTimeout(initWebsocket(), 10000); // }, []); return ( <div> <p>Price : {price}</p> <p>Last Update: {date}</p> </div> ); }

lo que hice, básicamente puse toda la conexión del socket dentro de useEffect y también puse una condición if para la respuesta.

https://codesandbox.io/embed/dark-fog-msg3v?fontsize=14&hidenavigation=1&theme=dark

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!