Собственно при перезагрузке, обрыве и прочего, соединение закрывается и пересоздается- так и должно быть, а при размонтировании компонента ?
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 версии, хотя они там вроде должны справа на лево работать на сколько помню, но может и забыл всякое бывает, в общем этот нюанс проверить тож над
import { cookies } from 'next/headers'
import { ClientUserProvider} from '...';
const getUser = async () => {
return fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/refresh`, {
next: { revalidate: 0 },
method: "GET",
headers: { Cookie: cookies().toString() },
})
.then(res => res.json())
.catch(e => {
console.log(e);
return { user: null };
})
}
export default async function RootLayout({ children }) {
const user = await getUser();
return (
<html lang="en">
<body>
<ClientUserProvider INIT_STATE={ user }>
{children}
</ClientUserProvider>
</body>
</html>
)
}
отправлялось на сайт пользователюкак вариант, с клиента через каждые N секунд отправлять запрос на получение уведомлений
и в телеграм бота- как вариант можешь отправить запрос на сервер с ботом, а сам тг бот, уже юзера уведомит об этом
Должно ли api заниматься отправкой уведомления в телеграм или оно не должно знать о существовании тг бота и сайта?у всех всё индивидуально, кто как делает, кто что придумает то и делает
но если у вас там как-то всё иначе, что сложности какие-то дикие возникли, то сочувствую