Personalizer
The Personalizer
is a special higher-order component which
changes the component's props to the values which match the
current personalized context.
It is returned from the JSS componentFactory
. JSS will render
this higher-order component which will, in-turn, render the
underlying React component which componentName
relates to.
#
Creating a PersonalizerThe personalizer needs a few things to perform it's task.
To create one, we expose a getPersonalizer
function from
the personalize-react
package.
The actual conversion of field values will depend on the
personalization engine you are using. This is why we
need the getPersonalizedProps
function from the ESI
package esi-jss-react
.
componentFactory
function#
Option 1: Wrap your info
Recommended for JSS websites using ESI
We recommend you wrap your componentFactory
function to create
a new function (higher order function) that includes the Personalizer
logic.
Pass the new function to the SitecoreContext instead of the
original componentFactory
.
// A JavaScript function of (componentName) => React.ComponentTypeimport componentFactory from './temp/componentFactory';import { componentFactoryWithUniformPersonalizer} from '@uniformdev/esi-jss-react';
const componentFactoryWithPersonalizer = componentFactoryWithUniformPersonalizer(componentFactory); // ... later, within your React code<SitecoreContext componentFactory={componentFactoryWithPersonalizer} layoutData={routeData}> <Layout route={routeData.sitecore.route} /></SitecoreContext>
#
Option 2: Create a React ComponentIf the componentFactory
wrapper does not support your needs then
you can create a Personalizer
react component and use it directly.
import { getPersonalizer } from '@uniformdev/personalize-react';import { getPersonalizedProps } from '@uniformdev/esi-jss-react';
// A JavaScript function of (componentName) => React.ComponentTypeimport componentFactory from './src/componentFactory'
const Personalizer = getPersonalizer({ getPersonalizedProps, componentFactory,});
#
Component FactoryThe Personalizer uses a componentFactory
function to access
the React component to send the updated props to.
This function is given the name of the component and should return a React ComponentType.
type ComponentFactory = (componentName: string) => ComponentType;
#
Allowed componentsYou can optionally pass an array of component names. This is an explicit way of only personalizing these components.
info
If this array is undefined
or empty the personalizer will wrap
every component.
#
Personalized PropsThe Personalizer
component deals with the personalization lifecycle
but the field values could be transformed based on different engines.
In the example above we are using ESI and so pass getPersonalizedProps
from that package.
#
Components (deprecated: use componentFactory)The Personalizer uses a JavaScript Map
to access the React component
to send the updated props to.