
Research
Security News
The Growing Risk of Malicious Browser Extensions
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
react-mobx-routing
Advanced tools
This package provides you the browser routing for:
npm
npm i react-mobx-routing
yarn
yarn add react-mobx-routing
The simplest way of using is Create React App.
Use Router
anywhere to show content by URL matching.
import Router, {history} from 'react-mobx-routing'
// or
// import Router, {history} from 'react-mobx-routing/Router'
const App = () => (
<div>
<button onClick={() => history.push('/')}>home</button> |
<button onClick={() => history.push('/test')}>test</button>
<div>
This is
<Router path='/'>
home
</Router>
<Router path='/test'>
test
</Router>
page
</div>
</div>
)
The history
is mobx-history-api.
Use path
to show router content by URL path
const Test = () => <Router path='/test'>test</Router>
test
will be shown when url equals/test
or/test?key=value#test
but not for/test/420
or/user/test
.
You can use it as regexp.
const Test = () => <Router path='/(foo|bar)'>test</Router>
test
will be shown when url path equals/foo
or/bar
.
You can get foo
or bar
by children function
const Test = () => <Router path='/(foo|bar)'>{get => get(1)}</Router>
/foo
returnsfoo
and/bar
returnsbar
.
The number in the get
function says which brackets you want to use.
const Test = () => <Router path='/(foo|bar)/(\d+)'>{get => get(2)}</Router>
/foo/13
returns13
and/bar/420
returns420
.
Use match
if you want to match URL by custom regexp
const Test = () => <Router match='^/(foo|bar)'>FOOBAR</Router>
/foo/13
returnsFOOBAR
and/bar
returnsFOOBAR
.
If you use match
then path
, search
, hash
, ish
, pathIsh
, searchIsh
and hashIsh
are not be used.
You can use a function as a child to get the value of the matching like for path
.
Use pathIsh
to make the soft routing by path. That means the path should start with path
property.
const Test = () => <Router path='/(foo|bar)' pathIsh>FOOBAR</Router>
/foo/13
returnsFOOBAR
and/bar/420/test?key=value#test
returnsFOOBAR
.
Starts with/foo
or/bar
.
Use ish
instead of pathIsh
, searchIsh
and hashIsh
equal true
const Test = () => <Router path='/(foo|bar)' ish>FOOBAR</Router>
The same as pathIsh
Use search
if you want to show content by search query of URL.
const Test = () => <Router search='key=value'>test</Router>
/foo/13?key=value#420
returnstest
but/foo/13?key=value&test
returns empty content.
Use searchIsh
or ish
to make a soft search.
const Test = () => <Router search='key=value' ish>test</Router>
now
/foo/13?key=value&test
and/foo/13?test=1&key=value&foo=bar
returnstest
.
Also, you can use only key for search
const Test = () => <Router search='key' ish>test</Router>
/?key&value
and/?value&key
returnstest
but/?key=1
and/?key1
returns nothing.
Use hash
if you want to show content by hash of URL.
const Test = () => <Router hash='test'>test</Router>
/any/path?any=search#test
returnstest
but/#test1
returns empty content.
Use hashIsh
or ish
to fix it.
const Test = () => <Router hash='test' ish>test</Router>
now
/#test1
and/#sometextwiththetestword
returnstest
.
This is an alternative of react Switch
.
Router
with other
shows content only if all routers without other
in the same Router
are not matched.
const Test = () => (
<Router>
<Router path='/'>home</Router>
<Router path='/user'>user</Router>
<Router other>other</Router>
</Router>
)
will show
home
for/
,user
for/user
andother
for any other url
You may use any structure inside Router
and several other
routers with any props.
const Test = () => (
<Router>
<div>
<Router path='/'>home</Router>
<div>
content
<Router path='/user'>user</Router>
</div>
<Router search='modal' other>modal</Router>
<Router other>
<Router path='/test'>test</Router>
<Router other><div>other</div></Router>
</Router>
</div>
</Router>
)
You can show content of router with delay.
const Test = () => <Router path='/test' showDelay={1000}>test</Router>
when URL became
/test
the content be not shown,test
will be shown in a second after that.
This is the same showDelay
but for hiding.
const Test = () => <Router path='/test' hideDelay={1000}>test</Router>
when URL became
/test
the content be shown immediately, but when URL is changed after that,test
will be hidden in a second.
This is the combine of showDelay
and hideDelay
.
const Test = () => <Router path='/test' delay={1000}>test</Router>
test
will be shown or hidden in a second.
It calls any time when the content will be shown
const Test = () => (
<Router
path='/test'
onShow={() => console.log('test')}>
test
</Router>
)
It calls any time when the content has shown
const Test = () => (
<Router
path='/test'
delay={1000}
onShown={() => console.log('test')}>
test
</Router>
)
It calls any time when the content will be hidden
const Test = () => (
<Router
path='/test'
onHide={() => console.log('test')}>
test
</Router>
)
It calls any time when the content has hidden
const Test = () => (
<Router
path='/test'
delay={1000}
onHidden={() => console.log('test')}>
test
</Router>
)
Use the component for comfortable redirection
import {Redirect} from 'react-mobx-routing'
Use the prop to redirect at the url.
const RedirectToHome = () => (
<Redirect url='/' />
)
const RedirectToLogin = () => (
<Redirect url='?modal=login' />
)
const RedirectToHeader = () => (
<Redirect url='#root' />
)
const RedirectToRepo = () => (
<Redirect url='https://github.com/d8corp/react-mobx-routing' />
)
The same as url
but works only with path.
const RedirectToHome = () => (
<Redirect path='/' />
)
You may combine with url
const RedirectToHome = () => (
<Redirect url='/foo#bar' path='/' />
)
// redirects to /#bar
The same as path
but works with search and you may combine with url
const RedirectToLoginModal = () => (
<Redirect search='modal=login' />
)
// redirects to ?modal=login
You may use an object of search keys and values
const RedirectToLoginModal = () => (
<Redirect search={{modal: 'login'}} />
)
// redirects to ?modal=login
undefined
value removes the key
history.push('/test?key=value')
render (
<Redirect search={{key: undefined}} />
)
// redirects to /test
The same as path
but works with hash and you may combine with url
const RedirectToRoot = () => (
<Redirect hash='root' />
)
// redirects to #root
By default Redirect
replaces url. If you wanna push the redirection to history use the property.
const RedirectToHome = () => (
<Redirect path='/' push />
)
By default the page scrolls up during redirection. You may change the scroll position by the property.
const RedirectToHome = () => (
<Redirect path='/' position={60} />
)
You may scroll to any element by selector query
const RedirectToHome = () => (
<Redirect path='/' position='#root' />
)
When you use smooth scroll you can wait while the scrolling finished and then make the redirection.
const RedirectToHome = () => (
<Redirect path='/' scrollFirst />
)
Use the component instance of a
.
rel="noreferrer"
andtarget="_blank"
are default for external links.
If href
starts from /
then the Link
will use History API.
/
is default value of href
.
const App = () => (
<>
<div>
<Link>Home</Link>
<Link href='/test'>Test</Link>
</div>
<Router path='/'>Home</Router>
<Router path='/test'>Test</Router>
</>
)
When href
starts from ?
the Link
will keep the pathname and change the search and hash.
const App = () => (
<>
<div>
<Link>Home</Link>
<Link href='/test'>Test</Link>
<Link href='?modal=test'>Test Modal</Link>
</div>
<Router path='/'>Home</Router>
<Router path='/test'>Test</Router>
<Router search='modal=test'><div>Test Modal</div></Router>
</>
)
When href
starts from #
the Link
will keep the whole URL except for hash.
By default Link
pushes to history but you may use replace
to replace current history state.
const Agree = () => (
<Link replace href='?'>I agree</Link>
)
href='?'
means clearing of search and hash
If you set activeClass
then the link will have the class if url starts from href
const Test = () => (
<Link activeClass='active' href='/test'>test</Link>
)
When you click the link html will be equal
<a class="active" href="/test">test</a>
By default activeClass
will be applied when url starts from href
but use exact
to compare exactly.
const Test = () => (
<Link activeClass='active' href='/test' exact>test</Link>
)
If you wanna scroll the page to custom position (by default it's up of the page) use scrollTo
const To100 = () => (
<Link scrollTo={100} href='/test'>test</Link>
)
const ToRoot = () => (
<Link scrollTo='#root' href='/test'>test</Link>
)
Negative value keep the page on the same scroll position.
const NoScroll = () => (
<Link scrollTo={-1} href='/test'>test</Link>
)
When you use smooth scroll you can wait while the scrolling finished and then make the redirection.
const Test = () => (
<Link scrollFirst href='/test'>test</Link>
)
If you wanna wait for something before the move by the link then the property for you.
const Test = () => (
<Link href='/test' onMove={move => setTimeout(move, 100)}>test</Link>
)
If you find a bug, please file an issue on GitHub
FAQs
Browser History API with Mobx and React
The npm package react-mobx-routing receives a total of 42 weekly downloads. As such, react-mobx-routing popularity was classified as not popular.
We found that react-mobx-routing demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover how browser extensions in trusted stores are used to hijack sessions, redirect traffic, and manipulate user behavior.
Research
Security News
An in-depth analysis of credential stealers, crypto drainers, cryptojackers, and clipboard hijackers abusing open source package registries to compromise Web3 development environments.
Security News
pnpm 10.12.1 introduces a global virtual store for faster installs and new options for managing dependencies with version catalogs.