I'm using next.js for rebuilding an app for server side rendering. I have a button that handles a search request.
In the old app, the handler was this one:
search = (event) => { event.preventDefault(); history.push({ pathname: '/results', state: { pattern: this.state.searchText, } }); }
In the results class, I could get the state date with this.props.location.state.pattern.
So now I'm using next.js:
import Router, { withRouter } from 'next/router' performSearch = (event) => { event.preventDefault(); Router.push({ pathname: '/results', state: { pattern: this.state.searchText } }); };
In the results class, I use
static async getInitialProps({req}) { return req.params; }
I'm not sure if I have to add this to my server.js:
server.get('/results', (req, res) => { return app.render(req, res, '/results', req.params) })
However, the function getInitialProps throws an error because req is undefined. Long text, short question: how to pass state or params to another page without using GET parameters?
If you want to send "route state" you have to do it via query string, but you can actually "mask" the path that is shown in the browser via the as property. as - Optional decorator for the URL that will be shown in the browser. You can decorate the URL to match the path name.
To navigate to a different URL, use router. push . This method pushes a new entry into the history stack, so when the user clicks the browser back button they will be taken to the previous URL.
In React JS, we would install a package called react-router-dom to implement routing inside the application. But Next JS has its own inbuilt router from the next/link , with which we can navigate between the pages. Before using the next/link , we need to set up the different pages/routes inside the pages folder.
In next.js
you can pass query parameters like this
Router.push({ pathname: '/about', query: { name: 'Someone' } })
and then in your next page (here in /about
page), retrieve the query
via the router
props, which needs to be injected to Component
by using withRouter
.
import { withRouter } from 'next/router' class About extends React.Component { // your Component implementation // retrieve them like this // this.props.router.query.name } export default withRouter(About)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With