Собственно при перезагрузке, обрыве и прочего, соединение закрывается и пересоздается- так и должно быть, а при размонтировании компонента ?
export default function ConversationList() {
let [dialogs, setDialogs] = useState([]);
useEffect(() =>
let events;
function createEvents() {
events = new EventSource(apiHost + urlPaths.eventRegistration)
events.onmessage = (ev) => {
const parsedData = JSON.parse(ev.data);
const id = parsedData?.dialog?._id.toString();
setDialogs(prev => [parsedData?.dialog, ...prev.filter((dialog) => dialog?._id.toString() !== id)]);
}
}
(async () => {
await loadRows();
createEvents();
})();
return () => events?.close();
}, []);
}
async function createEvents() {
if (events) events.close();
setEvents(events = new EventSource(apiHost + urlPaths.eventRegistration));
events.onmessage = (ev) => {
const parsedData = JSON.parse(ev.data);
const id = parsedData?.dialog?._id.toString();
setDialogs([parsedData?.dialog, ...dialogs?.filter((dialog) => dialog?._id.toString() !== id)]);
}
}
убедитесь что вас устраивает уровень поддержки в браузерах
<div>
<img src="test.png">
<h2>GG</h2>
</div>
div{
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
}
img:hover + h2 {
color: red;
}
в нем окажется не 300, а 50 эл-товтвою юз эффект знает о dialogs лишь то что там пустой массив изначально, твой юз эффект не отслеживает изменения твоих diaglos
setDialogs(prev => [parsedData?.dialog, ...prev.filter((dialog) => dialog?._id.toString() !== id)]);
useEffect( () => async() => {
await loadRows();
await createEvents();
}, []);
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'swc-loader',
options: {
jsc: {
parser: {
syntax: "ecmascript",
jsx: true,
decorators: false,
dynamicImport: true
},
"target": "es5"
}
}
}
}
Я полагаю так быть не должно.да явно не должно быть, в папке dist минимум должен быть Html файл, если его там нет, то предположу что нарушен порядок выполнения плагинов, то есть самым первым должен идти CleanWebpackPlugin а потом уже все остальные, но с эти не стакливался так как просто пользуюсь параметром clean: true в Webpack 5 версии, хотя они там вроде должны справа на лево работать на сколько помню, но может и забыл всякое бывает, в общем этот нюанс проверить тож над