Navigation
Navigation
Navigation is inspired by turbolinks.
Visit and Remote
Breezy comes with two thunks that wrap around fetch:
visitis used for page-to-page navigation, there can be only one visit ata time.
remoteis used with urls that contain thebzqparam for partial pageupdates.
When configuring your application in application.js, your page components would all receive a visit and remote function that will dispatch when called.
application_visit.js
application_visit.jsOut of the box, the visit thunk is bare, it doesn't navigate on success or specify any behavior on error. We have to enhance it with sane defaults for the web then inject it into your application to override the thunk.
If you've used the generators, this is done for you in application_visit.js and the resulting visit is injected in application.js.
You can add customizations to visit or remote in application_visit.js.
Single page navigation using visit
visitSingle page navigation must be explicitly enabled using a data attribute
or manually called using the visit thunk somewhere in your component:
Options passed to visit are also passed to fetch. Additionally, there are two features that enable low effort interactivity.
placeholders
The idea of placeholders is to optimistically copy the current page state over to the next page's state before the request. This is handy if the next page looks almost identical to the current page. Use cases include:
Modals
Providing content for manual deferments
Example:
or
beforeSave
beforeSaveYou can provide a callback that will modify the page before it gets saved to the Redux store. Very handy for chat applications that need to merge the current page's messages with the next one.
Example:
Partial page updates with remote
remoteremote combined with the bzq parameter can update any part of the Redux store in the background. Most of the time, you would be using this thunk to update the current page the user is seeing. Like visit, you can provide a beforeSave callback to modify content before it gets saved to the store.
You may also specify a pageKey param to tell Breezy where to store the results. If you're using the thunk through a connected component, this will be set to the key of the current page for you.
Deferments
Deferments are a low effort way to load content in async fashion, both automatically and manually.
auto
autoWhen visiting the above, PropsTemplate will render with
Then make a remote("/dashboard?bzq=data.metrics") call and 10 seconds later, {total_visitors: 30} will be immutably grafted into the same position on the Redux store and React will rerender. For more control, you may provide a success_action or fail_action, and Breezy will dispatch these actions when the promise resolves successfully or fails.
manual
manualUsing manual with deferment means that a remote call will not take place, it is up to you to fetch the node using remote yourself.
Last updated
Was this helpful?