Это var {Route, Redirect, RouteHandler, Link} = Router; действителен в Javascript?

Что это значит в Javascript? Я нашел это в примерах реакции-маршрутизатора

var { Route, Redirect, RouteHandler, Link } = Router;

Я получаю следующую ошибку, когда она запускается через браузер.

"Uncaught SyntaxError: Unexpected token {"

https://github.com/rackt/react-router/blob/master/examples/dynamic-segments/app.js

Esprima также дает ту же ошибку: http://esprima.org/demo/validate.html

Ответы

Ответ 1

По-видимому, это называется назначением деструктурирования.

Из другого сообщения здесь:

{x, y} = foo;

эквивалентно

x = foo.x;
y = foo.y;

Это часть ECMAScript 6, а преобразование JSX Facebook имеет необязательный флаг, позволяющий транслировать выбранный синтаксис ES6 (включая деструктурирование) на ES5-совместимый синтаксис, который response-router использует.

Вот оригинальный пост с ответом Майка Кристенсена:

Что означают {фигурные скобки} вокруг имени переменной javascript

Ответ 3

Это файл JSX, а не JavaScript. Он был изобретен Facebook как часть React.js. Перед компиляцией он скомпилируется в файл JavaScript. В предыдущей команде был файл @jsx pragma: https://github.com/rackt/react-router/commit/3abe98444481598beef22d3af2bf01effc556c6b

JSX позволяет делать такие вещи:

// Using JSX to express UI components.
var dropdown =
  <Dropdown>
    A dropdown list
    <Menu>
      <MenuItem>Do Something</MenuItem>
      <MenuItem>Do Something Fun!</MenuItem>
      <MenuItem>Do Something Else</MenuItem>
    </Menu>
  </DropDown>;

render(dropdown);

и этот

var HelloMessage = React.createClass({
  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});

React.render(<HelloMessage name="John" />, mountNode);