JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 6766
  • Score
    100M100P100Q120559F
  • License MIT

Elegant DSL for React

Package Exports

  • react-script

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-script) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

ReactScript

An elegant, flexible DSL for React for use with CoffeeScript (and maybe other languages)

With CoffeeScript:

# Alias it as whatever you want (maybe _ or $?)
E = ReactScript or require "react-script"

class Message extends React.Component
    render: ->
        E ".message", class: (if @props.author is you then "from-you"),
            E ".info",
                style: float: "right"
                "From "
                E "span.author", @props.author
                " at "
                E "span.time", @props.time
            E "p.body",
                @props.text
                if @props.fileTransfers
                    E ".transfers",
                        "Sent files:"
                        E "ul.files",
                            for transfer in @props.fileTransfers
                                E "li", E "a",
                                    href: transfer.downloadLink
                                    download: transfer.fileName
                                    transfer.fileName

message = E Message,
    author: "John"
    time: "5:47 PM"
    text: "Hello world!"
    fileTransfers: [
        {fileName:  "virus.exe", downloadLink: "#"}
    ]

React.render message, document.body

By simply supporting arrays and ignoring nully values, it works with all forms of conditionals and comprehensions.

All the functionality of classnames is built in. Just provide any class, classes, className, classNames or classList. All those properties are treated the same and can be a single class name, a single string with multiple class names, an object where the keys are the class names and the values are whether they should be present, or an array of any of the preceeding. Nully values are ignored, allowing for conditionals.

The whole library tries to be pretty flexible.

You can specify data-* and aria-* properties either as e.g. "data-size"/"area-role" or dataSize/ariaRole or data_size/area_role or data: size: 1.337/aria: role: "button".

If you find something that doesn't work as you'd hope, feel free to open an issue.

Install

npm i react-script --save

Run tests

npm test

Similar Projects