JSX (JavaScript)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

JSX (JavaScript Syntax Extension and occasionally referred as JavaScript XML) is an extension to the JavaScript language syntax.[1] Similar in appearance to HTML, JSX provides a way to structure component rendering using syntax familiar to many developers.

React components are typically written using JSX, although they do not have to be as components may also be written in pure JavaScript. JSX is similar to another extension syntax created by Facebook for PHP called XHP.

Markup[edit]

An example of JSX code:

class App extends React.Component {
  render() {
    return (
      <div>
        <p>Header</p>
        <p>Content</p>
        <p>Footer</p>
      </div>
    );
  }
}

Nested elements[edit]

Multiple elements on the same level need to be wrapped in a single React element such as the <div> element shown above, a fragment delineated by <Fragment> or in its shorthand form <>, or returned as an array.[2][3]

Attributes[edit]

JSX provides a range of element attributes designed to mirror those provided by HTML. Custom attributes can also be passed to the component.[4] All attributes will be received by the component as props.

JavaScript expressions[edit]

JavaScript expressions (but not statements) can be used inside JSX with curly brackets {}:

  <h1>{10+1}</h1>

The example above will render:

  <h1>11</h1>

Conditional statements[edit]

If–else statements cannot be used inside JSX but conditional expressions can be used instead. The example below will render { i === 1 ? 'true' : 'false' } as the string 'true' because i is equal to 1.

class App extends React.Component {
  render() {
    const i = 1;
    return (
      <div>
        <h1>{ i === 1 ? 'true' : 'false' }</h1>
      </div>
    );
  }
}

The above will render:

<div>
  <h1>true</h1>
</div>

Functions and JSX can be used in conditionals:

class App extends React.Component {

  render() {
    const sections = [1, 2, 3];
    return (
      <div>
        {sections.map((n,i) => (
            /* 'key' is used by react to keep track of list items and their changes */
            /* Each 'key' must be unique */
            <div key={"section-" + n}>
                Section {n} {i === 0 && <span>(first)</span>}
            </div>
        ))}
      </div>
    );
  }
}

The above will render:

<div>
  <div>Section 1</div>
  <div>Section 2</div>
  <div>Section 3</div>
</div>

Code written in JSX requires conversion with a tool such as Babel before it can be understood by web browsers.[5] This processing is generally performed during a software build process before the application is deployed.

External links[edit]

References[edit]

  1. ^ "Draft: JSX Specification". JSX. Facebook. Retrieved 7 April 2018.
  2. ^ Clark, Andrew (September 26, 2017). "React v16.0§New render return types: fragments and strings". React Blog.
  3. ^ "React.Component: render". React.
  4. ^ Clark, Andrew (September 26, 2017). "React v16.0§Support for custom DOM attributes". React Blog.
  5. ^ Fischer, Ludovico (2017-09-06). React for Real: Front-End Code, Untangled. Pragmatic Bookshelf. ISBN 9781680504484.