У меня есть переменная в состоянии, которое я обновляю через websocket.При регистрации переменной для проверки ее состояния она обновилась правильно, но когда я ссылаюсь на нее в функции для использования, она не определена.Я новичок в React и заявляю, и не уверен, что я делаю неправильно.
В обеих строках, где я использую ${contactCalling}
, оно отображается как неопределенное.
Любая помощь очень ценится!
import React from 'react';
import { useState, useEffect } from 'react';
import './App.css';
import socketIOClient from "socket.io-client";
import CallPane from './CallPane'
import '@opentok/client';
import {
SERVER_BASE_URL,
} from './config';
const BASEURL = 'http://localhost:4001'
const socket = socketIOClient(BASEURL);
function App() {
const [callFlag, setCallFlag] = useState(Boolean)
const [apiData, setApiData] = useState([])
const [contactCalling, setContactCalling] = useState('')
console.log(contactCalling)
socket.on("outgoing data", data => {
console.log(data);
setContactCalling(data.caller)
alert(`${contactCalling} is calling you`)
console.log('Call answered')
setCallFlag(true);
});
useEffect ((contactCalling) => {
fetch(SERVER_BASE_URL + `/room/${contactCalling}`)
.then(data => data.json())
.then(data => setApiData(data))
.catch((err) => {
console.error('Failed to get session credentials', err);
alert('Failed to get opentok sessionId and token. Make sure you have updated the config.js file.');
});
},[])
if (callFlag) {
return (
<div className="CallPane">
<CallPane credentials={apiData}/>
</div>
);
} else {
return (
<div className="CallPane">
</div>
);
}
}
export default App;