Boilerplate repoでお気づきかもしれませんが、MergeはJSXプリセットをすべてのコンポーネントのプリセットサブディレクトリに保存する必要があります。 プリセットはすべてのコンポーネントのデフォルト設定でレンダリングするために使用されます。Mergeは、デフォルトでレンダリングするプロパティの設定(子も含む)を知る必要があります。
この設定は、ユーザーまたはチームの誰かがUXPinエディタのキャンバスにコンポーネントをドラッグ&ドロップしたときにレンダリングされます。
一般的なプリセットは以下の通りです。
import React from 'react';
import Button from '../Button';
export default (
<Button
uxpId="button1"
icon={<Icon icon='TickerSvg' size='s' />}
mode="filled"
size="s"
stretched
type="error"
>
Merge!
</Button>
);
ファイルの最初にはReactライブラリとプリセットで表現したい全てのコンポーネントをインポートする必要があります。プリセットの export default()
部分に、コンポーネントの希望するデフォルト構成を表すJSXコードを配置します。すべてのコンポーネントのJSX表現には、一般のプロパティ設定とは別に、UXPin ID属性uxpId. uxpIdd
が必要になります。これにより、Merge はすべてのコンポーネントを適切にレンダリングし、コンポーネントのオーバーライドを記録します。(万が一発生した場合)
Mergeの JSX
プリセットは、コンポーネントの複雑なネスト構造で表現されます。すべての uxpId
プロパティが一意の値を維持する必要があります。 特定のプリセットでは、2つのコンポーネントが同じ uxpId
を持つことはできません。 それ以外にも、ネスト構造のプリセットを作成することは、React.jsのコンポーネントでJSXコードを構成するのと同じように機能します。全てのコンポーネントをインポートして export default()
ディレクティブで全体の構造を作る必要があります。
import React from 'react';
import SelectItem from '../../SelectItem/SelectItem';
import Select from '../Select';
export default (
<Select uxpId="select1">
<SelectItem uxpId="select.item.1">Option1</SelectItem>
<SelectItem uxpId="select.item.2">Option2</SelectItem>
<SelectItem uxpId="select.item.3">Option3</SelectItem>
</Select>
);
コンポーネントの uxpId
の名前を決める時、コンポーネントの持つ役割を考慮して決めてください。今後、ネストされたコンポーネントを別のコンポーネントに自動的に置き換えたい場合、同じuxpIdwillを維持することで、Mergeはすべてのデザインを新しいコンポーネントに自動的に更新することができます。
例:Button
を使用しなくなり、新しい ButtonNew
に置き換える場合
プリセットのコードの変更は、UXPin エディターの UXPin デザインシステム ライブラリに自動的に反映されます。UXPin エディターでユーザーがコンポーネントのプロパティを変更しない限り、Mergeはすべてのプロパティを変更します。この変更は、オーバーライドとして扱われ、そのまま残ります。以下の例を見てみましょう。
https://uxpincommunity.cdn.prismic.io/uxpincommunity%2F5e8714e6-881b-4e02-b89a-eac64f19519b_merge_button_comparison.mp4
最初はボタンのデフォルトのプリセットは次のようになります。
import React from 'react';
import Button from '../Button';
export default (
<Button
uxpId="action1"
size="small"
variant="contained"
color="primary"
fullWidth
>
Click me
</Button>
);
ユーザーがこの要素をUXPinキャンバスにドラッグし、UXPinのインターフェースでプロパティの size
をlargeに変更し、色をsecondary
に変更しました。 その後、デザインシステムチームの決定により、Button
のデフォルトプリセットが次のように変更されたとします。
import React from 'react';
import Button from '../Select';
export default (
<Button
uxpId="action1"
size="medium"
variant="contained"
color="primary"
fullWidth
>
Click me
</Button>
);
このReact.jsボタンを使用してUXPinエディタで作ったデザインは何も変更されません。 変更されたプロパティは、以前にユーザーによって上書きされてました。