Я хотел бы знать, почему ссылка в моем обработчике onMessage требует расширения перед очисткойJavascript

Форум по Javascript
Ответить
Anonymous
 Я хотел бы знать, почему ссылка в моем обработчике onMessage требует расширения перед очисткой

Сообщение Anonymous »

Вот мой обработчик сообщений:

Код: Выделить всё

const onMessage = (event: MessageEvent) => {
try {
const message = JSON.parse(event.data);
const normalizedMsg = Array.isArray(message) ? message : [message];
bufferRef.current = [...bufferRef.current, ...normalizedMsg];

if (timeoutRef.current) clearTimeout(timeoutRef.current);

timeoutRef.current = setTimeout(() => {
const flushed = [...bufferRef.current];
setFixtures(prev => [...prev, ...flushed]);
bufferRef.current = [];
}, DEBOUNCE_MS);
} catch (error) {
console.error('Error parsing message', error);
}
};
Примечание:

Код: Выделить всё

    const flushed = [...bufferRef.current];
setFixtures(prev => [...prev, ...flushed]);
bufferRef.current = [];
Мне нужно распространить bufferRef.current, так как без этого ни одно из моих сообщений не появится в пользовательском интерфейсе, а фикстуры (через setFixtures) останутся === [] В моем предыдущем коде массив оставался пустым, а это было так:

Код: Выделить всё

    setFixtures(prev => [...prev, ...bufferRef.current]);
bufferRef.current = [];
Можете ли вы объяснить, одно из этих или что-то другое:
  • Обновления состояния React синхронны по расписанию, но асинхронны при применении
  • Устаревшее замыкание в setTimeout
  • объяснение, основанное на взаимодействии МЕЖДУ установленными таймаутами


Подробнее здесь: https://stackoverflow.com/questions/798 ... ading-befo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»