connected-react-router
connected-react-router copied to clipboard
Will support react-router v6 and history v5?
Hello @supasate! Will support react-router v6 and history v5?
yeah, we really need this support, guys
I have tried this library - redux-first-history as a replacer for connected-react-router to bind react-router v6 with redux, but it works only with react 17, not with 18 (it causes an infinite loop error if you use rr6 Navigate component)
I think currently they don't provide support in near future. If you still want to use it with react-router@v6. You can make small tweak as follows.
Instead of using the
ConnectedRouter
You can make following default react-router Router component and make changes as follows
import React, { useLayoutEffect, useRef, useState } from 'react'
import { Route, Router, Routes } from 'react-router-dom'
import { createBrowserHistory } from 'history'
import { useDispatch } from 'react-redux'
import { onLocationChanged } from 'connected-react-router'
const history = createBrowserHistory()
export default ({ children }) => {
const isFirstRender = useRef(true)
const dispatch = useDispatch()
const [historyState, setHistoryState] = useState({
action: history.action,
location: history.location,
})
useLayoutEffect(() => {
return history.listen(setHistoryState)
}, [])
useLayoutEffect(() => {
if (isFirstRender.current) {
dispatch(onLocationChanged(history.location, history.action, true))
isFirstRender.current = false
}
return history.listen((arg) => {
dispatch(onLocationChanged(arg.location, arg.action, false))
})
}, [dispatch])
return (
<Router
// ...rest of props required
location={historyState.location}
action={historyState.action}
navigator={history}
>
{/* here it lies <Routes> <Route> ..... */}
{children}
</Router>
)
}
Rest of it is same as before. I hope it is helpful. Thank you.