Form context
Use the LetsForm context property to store volatile values to be used in Form Scripts without
updating the Form Schema (i.e. access tokens, etc)
For example consider the example of the Select component
const MY_FORM = {
component: 'select',
label: 'Country',
name: 'country',
options: [
{ value: 'us', label: 'United States' },
{ value: 'it', label: 'Italy' },
{ value: 'gr', label: 'Greece' }
],
script: `
const res = await fetch('some_url?country=' + value, {
headers: {
'Authorization': 'Bearer ' + context('token')
}
});
const stateOptions = await res.json();
setValue('state', 'options', stateOptions);
`
},
{
component: 'select',
label: 'State',
name: 'state',
options: []
}in this use case when the country component is selected, it triggers an HTTP call to get the options for the state dropdown
using an access token stored in the context property
const MyView = () => {
const [formContext, setFormContext] = useState({
token: 'my-token'
});
return (
<LetsForm
form={MY_FORM}
context={formContext}
/>
);
};If the context property changes, then the form is re-renders, for this reason the object used for the context
should be referential stable (the reference should not change across re-renders unless the values actually changes),
it should be stored in a state, constant or with useRef.
The example below causes unwanted re-renders of the form every time the view MyView re-renders, that’s because
a new reference is passed to the context property
// this is wrong!
const MyView = () => {
return (
<LetsForm
form={MY_FORM}
context={{
token: 'my-token'
}}
/>
);
};