ctx.off()

Loại bỏ event listener đã đăng ký qua ctx.on(eventName, handler). Thường được dùng kết hợp với ctx.on, hủy đăng ký vào thời điểm thích hợp để tránh memory leak hoặc trigger trùng lặp.

Kịch bản áp dụng

Kịch bảnMô tả
Cleanup React useEffectGọi trong cleanup của useEffect, loại bỏ listener khi component unmount
JSField / JSEditableFieldKhi two-way binding của field, hủy đăng ký js-field:value-change
Liên quan đến resourceHủy listener refresh, saved, v.v. đã đăng ký với ctx.resource.on

Định nghĩa kiểu

off(eventName: string, handler: (event?: any) => void): void;

Ví dụ

Sử dụng cặp đôi trong React useEffect

React.useEffect(() => {
  const handler = (ev) => setValue(ev?.detail ?? '');
  ctx.on('js-field:value-change', handler);
  return () => ctx.off('js-field:value-change', handler);
}, []);

Hủy đăng ký sự kiện resource

const handler = () => { /* ... */ };
ctx.resource?.on('refresh', handler);
// 适当时机
ctx.resource?.off('refresh', handler);

Lưu ý

  1. Tham chiếu handler nhất quán: handler được truyền vào khi ctx.off phải là cùng tham chiếu với khi ctx.on, nếu không sẽ không thể loại bỏ chính xác.
  2. Dọn dẹp kịp thời: Gọi ctx.off trước khi component unmount hoặc context bị hủy, để tránh memory leak.

Tài liệu liên quan