在不考虑性能的情况下,react可以使用flushSync强制刷新dom
例子:
import { useState, useEffect } from 'react';
import { flushSync } from 'react-dom';
export default function PrintApp() {
const [isPrinting, setIsPrinting] = useState(false);
useEffect(() => {
function handleBeforePrint() {
// 强制在改变值之后,刷新dom,由于react hook版本会把所有事件进行批次处理,会合并多次的setStatus,所以提供了这个方法
flushSync(() => {
setIsPrinting(true);
})
}
function handleAfterPrint() {
setIsPrinting(false);
}
window.addEventListener('beforeprint', handleBeforePrint);
window.addEventListener('afterprint', handleAfterPrint);
return () => {
window.removeEventListener('beforeprint', handleBeforePrint);
window.removeEventListener('afterprint', handleAfterPrint);
}
}, []);
return (
<>
<h1>是否打印:{isPrinting ? '是' : '否'}</h1>
<button onClick={() => window.print()}>
打印
</button>
</>
);
}
react hook 强制刷新dom
最新推荐文章于 2024-06-15 19:02:23 发布