2014-11-25 13 views
16

Cosa significa in Javascript? ho trovato questo in reagire-router esempiÈ var {Route, Redirect, RouteHandler, Link} = Router; valido in Javascript?

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

ottengo il seguente errore quando viene eseguito attraverso browserify.

"Uncaught SyntaxError: Unexpected token {" 

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

Esprima dà anche lo stesso errore: http://esprima.org/demo/validate.html

+0

Dove vedi esattamente quell'esempio (link per favore)? Chiaramente non è un javascript legale, ma è probabilmente utile per spiegare cosa è o per cosa è destinato a essere usato (o forse solo un errore). – jfriend00

+0

vedere l'esempio qui: https://github.com/rackt/react-router/blob/master/examples/dynamic-segments/app.js – Prasanth

+0

Questo esempio collegato non è sicuramente Javascript, quindi c'è chiaramente qualche altro parser (apparentemente [JSX] (http://jsx.github.io/)) che viene eseguito prima che qualsiasi interprete JS veda quel codice. – jfriend00

risposta

24

A quanto pare si chiama un incarico destrutturazione.

Da un altro post qui:

{x, y} = foo; 

è equivalente a

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

Questo fa parte di ECMAScript 6, e di Facebook JSX trasformare ha una bandiera opzionale per consentire transpiling selezionare sintassi ES6 (tra cui destrutturazione) alla sintassi compatibile con ES5, che react-router uses.

Ecco il post originale con risposta di Mike Christensen:

What do {curly braces} around javascript variable name mean

+0

Stavo per dire .. questa non è una sintassi specifica per JSX per quanto posso vedere ... Firefox javascript feature huh? –

+0

@BrettCaswell: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-destructuring-assignment –

+0

sì .. Ho capito che ... ho aggiornato questo post con quel link (che proveniva dalla pagina MDN) –

0

Questo è un file JSX, non JavaScript. È stato inventato da Facebook come parte di React.js. Viene compilato in un file JavaScript prima dell'esecuzione. Il file ha avuto pragma @jsx nel precedente commettere: https://github.com/rackt/react-router/commit/3abe98444481598beef22d3af2bf01effc556c6b

JSX permette di fare cose come questa:

// 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); 

e questo

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

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

'var {Route, Redirect, RouteHandler, Link} = Router;' non è JSX. La tua risposta non sembra rispondere a questo. –

+0

@FelixKling è tutto.Dai un'occhiata all'ultimo commento di commit e al metodo di rendering nel mezzo dei riferimenti a caster dell'argomento del documento. –

+0

@FelixKling Ho aggiornato la mia risposta con un collegamento al commit precedente che contiene il tag jsx pragma. –

Problemi correlati