updated latest react router syntax

This commit is contained in:
andres alcocer
2022-11-23 16:04:37 -05:00
parent 187e405505
commit 8bb69e8123
5 changed files with 33 additions and 32 deletions

View File

@@ -1,21 +1,32 @@
import React from 'react' import React from 'react'
import { BrowserRouter, Redirect, Route, Routes } from 'react-router-dom' import { BrowserRouter, Route, Routes, Outlet } from 'react-router-dom'
import Footer from './components/Footer' import Footer from './components/Footer'
import Navbar from './components/Navbar' import Navbar from './components/Navbar'
import Home from './pages/Home' import Home from './pages/Home'
import NotFound from './pages/NotFound' import NotFound from './pages/NotFound'
import Search from './pages/Search' import Search from './pages/Search'
const Layout = () => {
return (
<>
<Navbar />
<Outlet />
<Footer />
</>
)
}
const AppRouter = () => ( const AppRouter = () => (
<BrowserRouter> <BrowserRouter>
<Navbar />
<Routes> <Routes>
<Route path='/' exact render={() => <Navigate to='/browse' />} /> <Route path='/' element={<Layout />}>
<Route path='/browse' component={Home} /> <Route index element={<Home />} />
<Route path='/search' component={Search} /> <Route path='/browse' element={<Home />} />
<Route component={NotFound} /> <Route path='/search' element={<Search />} />
<Route path='*' element={<NotFound />} />
</Route>
</Routes> </Routes>
<Footer />
</BrowserRouter> </BrowserRouter>
) )

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect, useRef } from 'react' import React, { useState, useEffect } from 'react'
import { NavLink } from 'react-router-dom' import { NavLink } from 'react-router-dom'
import { withRouter } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
import { useScroll } from '../hooks/useScroll' import { useScroll } from '../hooks/useScroll'
import SearchLogo from '../static/images/search-icon.svg' import SearchLogo from '../static/images/search-icon.svg'
@@ -9,7 +9,8 @@ import BellLogo from '../static/images/bell-logo.svg'
import DropdownArrow from '../static/images/drop-down-arrow.svg' import DropdownArrow from '../static/images/drop-down-arrow.svg'
import DropdownContent from '../components/DropdownContent' import DropdownContent from '../components/DropdownContent'
const Navbar = ({ history }) => { const Navbar = () => {
const navigate = useNavigate()
const searchInput = React.useRef(null) const searchInput = React.useRef(null)
const [userInput, setUserInput] = useState('') const [userInput, setUserInput] = useState('')
const [scrollDimensions] = useScroll() const [scrollDimensions] = useScroll()
@@ -24,9 +25,9 @@ const Navbar = ({ history }) => {
document.activeElement === searchInput.current && document.activeElement === searchInput.current &&
userInput.length === 0 userInput.length === 0
) { ) {
history.push('/browse') navigate('/browse')
} }
if (userInput.length > 0) history.push(`/search?q=${userInput}`) if (userInput.length > 0) navigate(`/search?q=${userInput}`)
}, [userInput, searchInput]) }, [userInput, searchInput])
const onLogoClick = () => { const onLogoClick = () => {
@@ -75,4 +76,4 @@ const Navbar = ({ history }) => {
) )
} }
export default withRouter(Navbar) export default Navbar

6
src/hooks/index.js Normal file
View File

@@ -0,0 +1,6 @@
import { useDebounce } from './useDebounce'
import { useScroll } from './useScroll'
import { useViewport } from './useViewport'
import { useWithRouter } from './useWithRouter'
export { useDebounce, useScroll, useViewport, useWithRouter }

View File

@@ -1,17 +0,0 @@
import { useLocation, useNavigate, useParams } from 'react-router-dom'
/**
* @description Provides react router dom props
* @param {*} Component React component - JSX Element
* @returns React component with route props
*/
export const withRouter = (Component) => {
const ComponentWithRouterProp = (props) => {
let location = useLocation()
let navigate = useNavigate()
let params = useParams()
return <Component {...props} router={{ location, navigate, params }} />
}
return ComponentWithRouterProp
}

View File

@@ -1,5 +1,5 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import * as ReactDOM from 'react-dom/client'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux' import { createStore, applyMiddleware } from 'redux'
import ReduxThunk from 'redux-thunk' import ReduxThunk from 'redux-thunk'
@@ -23,4 +23,4 @@ const app = (
</Provider> </Provider>
) )
ReactDOM.render(app, document.getElementById('app')) ReactDOM.createRoot(document.getElementById('app')).render(app)