@@ -67,7 +67,7 @@ interface DialogStackEntry<P, R> {
6767
6868export interface DialogProviderProps {
6969 children ?: ReactNode ;
70-
70+ domRoot ?: HTMLElement ;
7171 /**
7272 * 关闭后组件卸载时间ms 给关闭动画使用
7373 * @default 1000
@@ -81,7 +81,7 @@ export const DialogsContext = createContext<{
8181} | null > ( null ) ;
8282
8383export function DialogsProvider ( props : DialogProviderProps ) {
84- const { children, unmountAfter = 1000 } = props ;
84+ const { children, unmountAfter = 1000 , domRoot } = props ;
8585 const [ stack , setStack ] = useState < DialogStackEntry < any , any > [ ] > ( [ ] ) ;
8686 const keyPrefix = useId ( ) ;
8787 const nextId = useRef ( 0 ) ;
@@ -149,28 +149,28 @@ export function DialogsProvider(props: DialogProviderProps) {
149149 ( ) => ( { open : requestDialog , close : closeDialog } ) ,
150150 [ requestDialog , closeDialog ]
151151 ) ;
152-
152+ const stackItem = stack . map ( ( { key, open, Component, payload, promise } ) => (
153+ < Component
154+ key = { key }
155+ payload = { payload }
156+ open = { open }
157+ resolve = { ( result ) => {
158+ closeDialog ( promise , true , result ) ;
159+ } }
160+ reject = { ( result ) => {
161+ closeDialog ( promise , false , result ) ;
162+ } }
163+
164+
165+ />
166+ ) )
153167 return (
154168 < DialogsContext . Provider value = { contextValue } >
155169 { children }
156- { createPortal (
157- stack . map ( ( { key, open, Component, payload, promise } ) => (
158- < Component
159- key = { key }
160- payload = { payload }
161- open = { open }
162- resolve = { ( result ) => {
163- closeDialog ( promise , true , result ) ;
164- } }
165- reject = { ( result ) => {
166- closeDialog ( promise , false , result ) ;
167- } }
168-
169-
170- />
171- ) ) ,
172- document . body
173- ) }
170+ { domRoot ? createPortal (
171+ stackItem ,
172+ domRoot
173+ ) : stackItem }
174174 </ DialogsContext . Provider >
175175 ) ;
176176}
0 commit comments