Open Binote opened 2 years ago
- export default (props: ViewerProps) => { + export default React.forwardRef((props: ViewerProps, ref) => { const defaultContainer = React.useRef(typeof document !== 'undefined' ? document.createElement('div') : null); const [ container, setContainer ] = React.useState(props.container); const [ init, setInit ] = React.useState(false); React.useEffect(() => { + if(!container){ document.body.appendChild(defaultContainer.current); + } }, []); React.useEffect(() => { if (props.visible && !init) { setInit(true); } }, [props.visible, init]); React.useEffect(() => { if (props.container) { setContainer(props.container); } else { setContainer(defaultContainer.current); } }, [props.container]); if (!init) { return null; } return ReactDOM.createPortal(( <ViewerCore + // 其他组件也需要用`React.forwardRef`来支持ref + ref={ref} {...props} /> ), container); });