У меня есть пользовательский компонент BrowserRouter
, потому что мне нужен доступ к экземпляру истории из компонента React, поэтому я создал его следующим образом:
OwnBrowserRouter.js
import { BrowserRouter } from "react-router-dom"
import { createBrowserHistory } from "history"
export const history = createBrowserHistory()
export default class OwnBrowserRouter extends BrowserRouter {
history = history
}
Затем я использую этот компонент OwnBrowserRouter
в своем приложении и передаю компонент getUserConfirmation
с пользовательским модом:
App.js
<OwnBrowserRouter getUserConfirmation={getUserConfirmation}> ... </>
getUserConfirmation.js
const getUserConfirmation = (message, callback) => {
const modal = document.createElement("div")
document.body.appendChild(modal)
const withCleanup = answer => {
ReactDOM.unmountComponentAtNode(modal)
document.body.removeChild(modal)
callback(answer)
}
ReactDOM.render(
<ConfirmModal
open={true}
type={MODAL.TYPE.CANCEL}
handleClose={() => withCleanup(false)}
handleConfirm={() => withCleanup(true)}
title="Are you sure?"
text={message}
/>,
modal
)
}
export default getUserConfirmation
Тогда я (конечно) где-то рендерирую <Prompt>
компонент ... Главная проблема в том, что он работает с origin BrowserRouter
импортируется из react-router-dom
, но всякий раз, когда я переключаюсь на OwnBrowserRouter
, он начинает отображать уродливое диалоговое окно браузера (не мой модальный стиль).