Props

Props (short for “property”) are settings to configure on a component instance. Props enable you to customize individual instances of a component. There are two more ways to customize component instances - Slots and Variants.

Consider a Profile Card component, with a name and a profile picture.

profile card outline

We can create the component and add the name and img props. Then every component instance can have its own values for name and img.

profile cards

Adding Props

There are two ways to add props to a component:

  • Say you just want to expose an existing setting of an element in your component. You can right-click that setting and “Link” it as a prop on the outer component. Check out Allow External Access section for more details.

  • You can directly add custom props, of varying types, to your component. Add these from the Component Data tab in the right sidebar. You can specify what type it is there, such as text, image, or data. (explained below via the name prop)

To understand the above two ways of adding props, consider again the Profile Card component described above. We will go through the steps to create its name and img props. You can also follow along with this Plasmic project.

Adding Props Directly

Create the component using the instructions in the Components section. Then, switch to the Component Data tab, and under Props section, click the + icon.

prop add icon

Fill in the prop details in the New Prop modal, then Confirm.

new prop modal

The name prop should now be created.

profile card name prop

Now we want to link the name prop to the name content in the Profile Card. To do that, find the Text component in the Outline tab. Set a dynamic value on its Content prop.

profile card name content hardcoded

In the “Select data” modal that appears, select the name prop.

profile card select data modal

The name prop should now be linked to the text in the Profile Card.

profile card name prop linked

Allow external access to a component setting

You are able to create props by exposing the setting of a component. Using this functionality you can allow external read/write access to almost any setting of a component.

As an example we will link the profile image source setting to an image prop. To do that, find the img component in the Outline tab. Then, find its built-in Image setting. Click on the menu icon next to it, hover over “Allow external access”, and select “Create new prop” option to create a new img prop for the ProfileCard.

profile card allow external access

You will see a prompt, which will ask you about the desired name for the prop. It will be used both in the settings tab and in the data picker.

profile card new img prop modal

The img prop should now be created and linked to the profile picture in the ProfileCard.

profile card img link tooltip

You should now see the name and img props in the Component Data tab.

profile card props

Instances of this component will allow setting values of these props in the Settings tab.

profile card setting

You can take any element in the component and expose its non-style attributes as props.

A note on slots

You could expose a bunch of slots to fill in the user’s name, bio, profile, links, etc., as well as expose variants controlling whether the user is shown as a staff user, new user, etc. But you’d need to fill this in per component.

A more scalable approach is to expose props for the user’s data. This data likely may be queried straight from some database or API. Then you can just pass in that chunk of data, and then from within the component, you can have your various elements wired up to the prop (using dynamic values), as explained above. See this Plasmic project for an example of this use case.

Moreover, slots are more suitable in situations where you want to add a custom node. However, if all that’s changing is some text or a configuration, then props are the recommended approach.

More Examples

Input component

If you have an Input component containing an input textbox, you can expose the placeholder as a prop of the Input component, so that each instance of Input can specify its own placeholder.

input props

Button component

If you have a Button component, you can expose props such as:

  • size (large/medium/small)
  • shape (round/cornered)
  • type (warning/submit)

Each instance of “Button” can specify its own prop values. So, for example, a Call-to-Action button can be large in size, but an Ok button can be medium sized.

button props

Rating component

A Rating component can expose props such as:

  • maximum rating (e.g. 5 star or 10 star rating)
  • whether decimal ratings are allowed (allow half)
  • whether the rating is read-only (disabled) or editable

Each instance of Rating can specify its own prop values. So, for example, an existing book review can have a read-only rating, but if you are adding your own review for that book, you would want a rating component that is editable.

rating props

Adding custom nodes using slots

In the Rating example, if you want to customize the rating icon (having a default icon of star), you can use a special kind of prop - a slot! This is because slots let you add custom nodes to a component.

rating custom icon

Likewise, in the Button component, you can add custom content to the button (e.g. “Send” text with a send icon) using a slot.

button with slot outline
Was this page helpful?

Have feedback on this page? Let us know on our forum.