@mazzard/mobx-react-router v1.0.0
mobx-react-router
Use Router anywhere to show content by URL matching.
github | npm
Installation
npm
npm i @mazzard/mobx-react-routeryarn
yarn add @mazzard/mobx-react-routerpath string
Use path to show router content by URL path
const Test = () => <Router path='/test'>test</Router>
testwill be shown when url equals/testor/test?key=value#testbut not for/test/420or/user/test.
You can use it as regexp.
const Test = () => <Router path='/(foo|bar)'>test</Router>
testwill be shown when url path equals/fooor/bar.
You can get foo or bar by children function
const Test = () => <Router path='/(foo|bar)'>{get => get(1)}</Router>
/fooreturnsfooand/barreturnsbar.
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/13returns13and/bar/420returns420.
match string
Use match if you want to match URL by custom regexp
const Test = () => <Router match='^/(foo|bar)'>FOOBAR</Router>
/foo/13returnsFOOBARand/barreturnsFOOBAR.
If you use match then path, search, hash, ish, pathIsh, searchIsh and hashIsh are not be used.
pathIsh boolean
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/13returnsFOOBARand/bar/420/test?key=value#testreturnsFOOBAR.
Starts with/fooor/bar.
ish boolean
Use ish instead of pathIsh, searchIsh and hashIsh equal true
const Test = () => <Router path='/(foo|bar)' ish>FOOBAR</Router>The same as pathIsh
search string
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#420returnstestbut/foo/13?key=value&testreturns empty content.
searchIsh boolean
Use searchIsh or ish to make a soft search.
const Test = () => <Router search='key=value' ish>test</Router>now
/foo/13?key=value&testand/foo/13?test=1&key=value&foo=barreturnstest.
Also, you can use only key for search
const Test = () => <Router search='key' ish>test</Router>
/?key&valueand/?value&keyreturnstestbut/?key=1and/?key1returns nothing.
hash string
Use hash if you want to show content by hash of URL.
const Test = () => <Router hash='test'>test</Router>
/any/path?any=search#testreturnstestbut/#test1returns empty content.
hashIsh boolean
Use hashIsh or ish to fix it.
const Test = () => <Router hash='test' ish>test</Router>now
/#test1and/#sometextwiththetestwordreturnstest.
other boolean
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
homefor/,userfor/userandotherfor 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>
)prefix string
Use prefix if you want to handle URL prefixes which are optional.
const Test = () => <Router prefix='/en' path='/test'>test</Router>will show
testfor/testand/en/test
prefix can be used as regexp and spreads for all children
const Test = () => (
<Router prefix='/(en|ru)'>
<Router path='/test'>test</Router>
<Router other>none</Router>
</Router>
)will show
testfor/test,/en/testand/ru/test, otherwisenone.
The prefix is not extendable, you can only replace the prefix
showDelay number
You can show content of router with delay.
const Test = () => <Router path='/test' showDelay={1000}>test</Router>when URL became
/testthe content be not shown,testwill be shown in a second after that.
hideDelay number
This is the same showDelay but for hiding.
const Test = () => <Router path='/test' hideDelay={1000}>test</Router>when URL became
/testthe content be shown immediately, but when URL is changed after that,testwill be hidden in a second.
delay number
This is the combine of showDelay and hideDelay.
const Test = () => <Router path='/test' delay={1000}>test</Router>
testwill be shown or hidden in a second.
onShow () => void
It calls any time when the content will be shown
const Test = () => (
<Router
path='/test'
onShow={() => console.log('test')}>
test
</Router>
)onShown () => void
It calls any time when the content has shown
const Test = () => (
<Router
path='/test'
delay={1000}
onShown={() => console.log('test')}>
test
</Router>
)onHide () => void
It calls any time when the content will be hidden
const Test = () => (
<Router
path='/test'
onHide={() => console.log('test')}>
test
</Router>
)onHidden () => void
It calls any time when the content has hidden
const Test = () => (
<Router
path='/test'
delay={1000}
onHidden={() => console.log('test')}>
test
</Router>
)History API
To change URL or do anything with URL history and more use history
import {history} from '@mazzard/mobx-react-router'
history.push('/test')More details here