This is a plugin that only has a peer dependency to piral-core
. What piral-containers
brings to the table is a set of Pilet API extensions that can be used with piral
or piral-core
.
By default, these API extensions are not integrated in piral
, so you'd need to add them to your Piral instance.
Why and When
State management is important. While plugins such as piral-redux
bring in an additional kind of state container they also allow using this state container in pilets. piral-containers
makes the global app state container accessible by all pilets. Using piral-containers
every pilet can create its own states within the global store.
Alternatives: Leave every pilet to decide and bundle their own state management. A lightweight, framework-agnostic alternative would be unistore.
Video
We also have a video for this plugin:
@youtube
Documentation
The following functions are brought to the Pilet API.
createState()
Creates a new pilet global state container. The state container will essentially couple to the app shell global state container. It is, however, only available for use inside the pilet.
Usage
::: summary: For pilet authors
You can use the createState
function from the Pilet API to create your own sub states in the global state container of the Piral instance.
Example use:
import { PiletApi } from '<name-of-piral-instance>';
import { MyPage } from './MyPage';
export function setup(piral: PiletApi) {
const connect = piral.createState({
state: {
count: 0,
},
actions: {
increment(dispatch) {
dispatch(state => ({
count: state.count + 1,
}));
},
decrement(dispatch) {
dispatch(state => ({
count: state.count - 1,
}));
},
},
});
piral.registerPage(
'/sample',
connect(({ state, actions }) => <MyPage count={state.count} {...actions} />),
);
}
:::
::: summary: For Piral instance developers
The provided library only brings API extensions for pilets to a Piral instance.
For the setup of the library itself you'll need to import createContainersApi
from the piral-containers
package.
import { createContainersApi } from 'piral-containers';
The integration looks like:
const instance = createInstance({
plugins: [createContainersApi()],
});
There are no options available.
:::
License
Piral is released using the MIT license. For more information see the license file.