Building the lib
docker-compose up -d --force-recreate rps-compiler &&\
docker exec -it rps-compiler sh -c 'npm install && npm run build' &&\
docker-compose stop rps-compiler
It will generate the transpiled javascript at build folder
Examples
State callback
Router.register(this, {
'/': (state) => {
},
'404': (state) => {
console.debug('called when match was not found');
}
});
State contract
{
title: '',
path: '',
page: null,
pathVar: [1, 'b'],
query: URLSearchParams
}
Link
If you just want to transitate from a page to another without use pushstate
<Link pushstate="false" page={<p>what you want to render?</p>} href="/some/path" >Some link</Link>
Using pushstate
<Link href="/some/path" >Some link</Link>
Creating a page that loads the post information and have a permanent link to be acessed anywhere
import React from 'react';
import Router, {Link} from "./route/Router.js"
class App extends React.Component {
constructor(){
super();
this.state = {}
Router.register(this, {
'^/posts/(\\d+)' : (state) => {
this.setState({page: <p>{state.pathVar[0]}</p>});
}
})
}
componentDidMount(){
Router.start();
}
render(){
return (
<div className="container">
<Link title="Home" href="/posts/1/" >Post 1</Link>
<div style={{background: "#F2F2F2", minHeight: 100, marginTop: 20}}>
{this.state.page}
</div>
</div>
)
}
}
Page that just load another page without change URL and lost the state when page reloads
import React from 'react';
import Router, {Link} from "./route/Router.js"
class App extends React.Component {
constructor(){
super();
this.state = {};
Router.register(this, {});
}
load(state){
console.debug('m=App.load, state=%o', state);
this.setState({page: state.page});
}
componentDidMount(){
Router.start();
}
render(){
return (
<div className="container">
<Link title="Home" href="/posts/1/" >Post 1</Link>
<Link pushstate="false" page={<p>{JSON.stringify(v)}</p>} href={"/users/" + v.name.toLowerCase()} >{v.name}</Link>
<div style={{background: "#F2F2F2", minHeight: 100, marginTop: 20}}>
{this.state.page}
</div>
</div>
)
}
}