Web navigation

Basic

Is it possible to have multiple “#” in a url?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://www.example.com/hey#foo#bar
http://www.example.com/hey#foo#bar
http://www.example.com/hey#foo#bar

which is the same window.location.hash for

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://www.example.com/hey#foo%23bar
http://www.example.com/hey#foo%23bar
http://www.example.com/hey#foo%23bar

How to use “react-router”?

How to create a browser router?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom'
const redirectTest = 'users/1' // http://localhost/users/1
const App = () => {
return (
<>
{/* Load page with new path but keeping Header */}
<Header />
{/* CREATE A BROWSER ROUTER */}
<BrowserRouter>
<Switch>
{/* Redirect from root path to a different path */}
<Redirect exact from='/' to={`/${redirectTest}`} />
{/* Render specific component basing on url param}
<Route path='users/:id/' component={renderComponent} />
{/* ... */}
{/* Render 404 page if url doesn't match any format}
<Route component={render404} />
</Switch>
</BrowserRouter>
{/* Load page with new path but keeping Footer */}
<Footer />
</>
)
}
function renderComponent(props: any) {
const { id } = props.match.params
return (
<UserDetail userId={id} />
)
}
function render404(): any {
window.location.href = 'https://www.myhomepage.com/404#/'
return null
}
export default App
import { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom' const redirectTest = 'users/1' // http://localhost/users/1 const App = () => { return ( <> {/* Load page with new path but keeping Header */} <Header /> {/* CREATE A BROWSER ROUTER */} <BrowserRouter> <Switch> {/* Redirect from root path to a different path */} <Redirect exact from='/' to={`/${redirectTest}`} /> {/* Render specific component basing on url param} <Route path='users/:id/' component={renderComponent} /> {/* ... */} {/* Render 404 page if url doesn't match any format} <Route component={render404} /> </Switch> </BrowserRouter> {/* Load page with new path but keeping Footer */} <Footer /> </> ) } function renderComponent(props: any) { const { id } = props.match.params return ( <UserDetail userId={id} /> ) } function render404(): any { window.location.href = 'https://www.myhomepage.com/404#/' return null } export default App
import { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom'

const redirectTest = 'users/1' // http://localhost/users/1

const App = () => {
  return (
    <>
      {/* Load page with new path but keeping Header */}
      <Header />

      {/* CREATE A BROWSER ROUTER */}
      <BrowserRouter>
        <Switch>
          
          {/* Redirect from root path to a different path */}
          <Redirect exact from='/' to={`/${redirectTest}`} />

          {/* Render specific component basing on url param}
          <Route path='users/:id/' component={renderComponent} />

          {/* ... */}

          {/* Render 404 page if url doesn't match any format}
          <Route component={render404} />
        </Switch>
      </BrowserRouter>

      {/* Load page with new path but keeping Footer */}
      <Footer />
    </>
  )
}

function renderComponent(props: any) {
  const { id } = props.match.params

  return (
    <UserDetail userId={id} />
  )
}

function render404(): any {
  window.location.href = 'https://www.myhomepage.com/404#/'
  return null
}

export default App

How to pass data to child component?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Add param inside component
<Route exact path="/details/:id" component={DetailsPage} />
// Add param inside component <Route exact path="/details/:id" component={DetailsPage} />
// Add param inside component
<Route exact path="/details/:id" component={DetailsPage} />
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Access param inside component
props.match.params.id
// Access param inside component props.match.params.id
// Access param inside component
props.match.params.id

or

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<Route exact path="/details/:id" render={(props) => (
<DetailsPage id={props.match.params.id}/>
)} />
<Route exact path="/details/:id" render={(props) => ( <DetailsPage id={props.match.params.id}/> )} />
<Route exact path="/details/:id" render={(props) => (
    <DetailsPage id={props.match.params.id}/>
)} />

How to access router params anywhere in child components?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { useParams } from "react-router-dom";
const EditPost = () => {
const params = useParams();
return <p>Your Post ID is: {params.id}</p>
}
export default EditPost;
import { useParams } from "react-router-dom"; const EditPost = () => { const params = useParams(); return <p>Your Post ID is: {params.id}</p> } export default EditPost;
import { useParams } from "react-router-dom";

const EditPost = () => {
  const params = useParams();

  return <p>Your Post ID is: {params.id}</p>  
}

export default EditPost;

How to configure url for tabs?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { Tab, TabList } from 'react-tabs'
import { Link } from 'react-router-dom'
const TabHeader = ({ tabList }) => {
return (
<TabList>
{tabList.map((element) => {
<Tab>
{/* Tab "users": http://localhost#/users */}
{/* Tab "products": http://localhost#/products */}
<Link to={`#/${element.url}`}>
{element.tabTitle}
</Link>
</Tab>
)
})}
</TabList>
)
}
export default TabHeader
import { Tab, TabList } from 'react-tabs' import { Link } from 'react-router-dom' const TabHeader = ({ tabList }) => { return ( <TabList> {tabList.map((element) => { <Tab> {/* Tab "users": http://localhost#/users */} {/* Tab "products": http://localhost#/products */} <Link to={`#/${element.url}`}> {element.tabTitle} </Link> </Tab> ) })} </TabList> ) } export default TabHeader
import { Tab, TabList } from 'react-tabs'
import { Link } from 'react-router-dom'

const TabHeader = ({ tabList }) => {
  return (
    <TabList>
      {tabList.map((element) => {
          <Tab>

            {/* Tab "users": http://localhost#/users */}
            {/* Tab "products": http://localhost#/products */}
            <Link to={`#/${element.url}`}>

              {element.tabTitle}
            </Link>
          </Tab>
        )
      })}
    </TabList>
  )
}

export default TabHeader

Others

How to add clickable to the site?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function Navbar() {
return (
<div>
<Link to="/">Home</Link>
<Link to="/about">About Us</Link>
<Link to="/shop">Shop Now</Link>
<Link
to={{
pathname: '/profile',
state: {infoId: info.id},
}}
>Profile</Link>
</div>
);
};
function Navbar() { return ( <div> <Link to="/">Home</Link> <Link to="/about">About Us</Link> <Link to="/shop">Shop Now</Link> <Link to={{ pathname: '/profile', state: {infoId: info.id}, }} >Profile</Link> </div> ); };
function Navbar() {
  return (
    <div>
      <Link to="/">Home</Link>
      <Link to="/about">About Us</Link>
      <Link to="/shop">Shop Now</Link>
      <Link
        to={{
          pathname: '/profile',
          state: {infoId: info.id},
        }}
      >Profile</Link>
    </div>
  );
};
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Access state from
props.location.state
// Access state from props.location.state
// Access state from 
props.location.state

How to update the url without causing a navigation/reload?

When you declare Route path

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// input 2021-08-06/melbourne/race/7/results#/...
<Route path='/:date/:location/' component={renderComponent} />
// input 2021-08-06/melbourne/race/7/results#/... <Route path='/:date/:location/' component={renderComponent} />
// input 2021-08-06/melbourne/race/7/results#/...

<Route path='/:date/:location/' component={renderComponent} />

And you want to update number “7” to “6”

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const history = useHistory()
history.push("6")
// output: 2021-08-06/melbourne/race/6/
const history = useHistory() history.push("6") // output: 2021-08-06/melbourne/race/6/
const history = useHistory()
history.push("6")

// output: 2021-08-06/melbourne/race/6/

Be the first to comment

Leave a Reply

Your email address will not be published.


*