1.13.2 • Published 4 years ago

babel-plugin-react-jsx-directives v1.13.2

Weekly downloads
4
License
ISC
Repository
github
Last release
4 years ago

babel-plugin-react-jsx-directives

npm GitHub repo size high usability

Babel plugin that carries directives to React JSX:

Installation

npm i babel-plugin-react-jsx-directives

Options

OptionTypeDescriptionDefault value
prefixstringA prefix directives are preceded with; must consist of one or more lowercase characters, plus can contain $ char(s).$
prefixSeparationbooleanWhether a prefix and directive name should be separated with the - character.false

Change of the Prefix

Replace the default $ prefix with x-, so e.g., $if becomes x-if:

plugins: [
	['babel-plugin-react-jsx-directives', {
		prefix: 'x',
		prefixSeparation: true
	}]
]

The $if Directive

<p $if={this.state.status == 'available'}>
	I'm available
</p>
<p $elseif={this.state.status == 'busy'}>
	I'm busy now
</p>
<p $else>
	I'm certainly AFK
</p>

The $show Directive

<div $show={operationPerformed}>
	Operation has finished successfully.
</div>

The $hide Directive

<div $hide={errors.length === 0}>
	form contains errors
</div>

The $hidden Directive

<div $hidden={!show}>
	<img src="..." />
</div>

$hide vs. $hidden

  • $hide - an element hidden by the $hide directive is not visible and takes no space on the page (it is done by CSS display: none setting)
  • $hidden - an element hidden by the $hidden directive is not visible on the page but does take space of the page as if it were displayed (it is done by CSS visibility: hidden setting)

The $for Directive

<ul>
	<li $for={(book, idx) in this.state.books}
		key={idx}
	>
		{idx + 1}. {book.title}
	</li>
</ul>

The $switch Directive

<div $switch={this.state.n}>
	<p $case={1}>one</p>
	<p $case={2}>two</p>
	<p $case={3}>three</p>
	<p $default>?</p>
</div>

The $class Directive

<div className="box"
	$class={{isError: this.state.isError, isOk: this.state.isOk}}
>...</div>

The $class-* Directive

<div className="message"
	$class-fullscreen={this.state.device == 'mobile'}
>...</div>

The $style-* Directive

<p $style-color={hasError ? 'red' : '#222'}>...</p>
<p $style-fontSize="20">...</p>

You can use $style-font-size, yet the plugin will turn it into $style-fontSize, eventually.

  • a unit can be specified:
<p $style-margin_px="25">...</p>
  • use percent if a unit is meant to be %:
<div $style-width_percent="75">...</div>

A unit can be specified if a value of the directive is just a string rather than expression.

The $model Directive

  • the input below is connected to the phrase property of a component state:
<input $model="phrase" />
  • and this one to the accepted property of the state:
<input type="checkbox" $model="accepted" />
{ this.state.accepted ? 'Accepted' : 'Not accepted' }

The $params Directive

The directive allows omitting callback when using render props.

  • instead of a callback:
<div user={this.state.user}>
	{(user, idx) => {
		return <p>[{ idx }] { user.name } { user.surname } ({ user.age })</p>;
	}}
</div>
  • you can use the $params directive:
<div user={this.state.user} $params={(user, idx)}>
	<p>[{ idx }] { user.name } { user.surname } ({ user.age })</p>
</div>

The $dynamic-prop Directive

<div $dynamic-prop={[propToBind, valueForProp]}>
	...
</div>

It's like v-bind:[propToBind]="valueForProp" directive known from the Vue framework.

The $dynamic-event Directive

<div $dynamic-event={[eventToListen, eventsHandler]}>
	...
</div>

It's like v-on:[eventToListen]="eventsHandler" directive known from the Vue framework.

1.13.2

4 years ago

1.13.1

4 years ago

1.13.0

4 years ago

1.12.1

4 years ago

1.12.0

4 years ago

1.11.0

4 years ago

1.9.0

4 years ago

1.8.0

4 years ago

1.10.0

4 years ago

1.7.0

4 years ago

1.6.0

4 years ago

1.5.0

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago