[Get started]から始めるReact開発：その1

angular2を放置して何故かReactをやってみるだめな子。
単純に話が難しくなってきたから若干別の知識が必要だということに気づいただけです。
というかある程度まで記事は書いているけど公開していないだけです。
そちらはほそぼそ勧めてます。

というわけで[React](https://facebook.github.io/react/)やっていきたいと思います。
基本的にはreactを覚えたいのもあるけど英語の勉強がてらやってるものなので日本語を探してすらいません。
参考にする場合どっかに日本語版があるのであればそっちを見たほうがいいでしょう。
あ、インストールからじゃないのでそこら辺は適当にやってください。

[[Get started]から始めるReact開発：その1](http://qiita.com/t-katsura/items/6c3a92583b8a738e2921)
[[Get started]から始めるReact開発：その2:Rendering Elements](http://qiita.com/t-katsura/items/43ac2e758fd53a8a9ffa)
[[Get started]から始めるReact開発：その3:Components and Props](http://qiita.com/t-katsura/items/d3c320a0b68cee7c9d77)
[[Get started]から始めるReact開発：その4(State and Lifecycle①](http://qiita.com/t-katsura/items/7b8e4889fe73e4d3245d)
[[Get started]から始めるReact開発：その4(State and Lifecycle②](http://qiita.com/t-katsura/items/24a14ff763ac7738a036)

#Get Started

##まずは基本中の基本Hello World

どうやら簡単なReactの始め方はこのコードをCodePenで実行してみることらしい。

[CodePen](http://codepen.io/gaearon/pen/ZpvBNJ?editors=0010)

```
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);
```

次の幾つかのセクションで徐々にReactの使い方を教えてくれるらしい。
一度マスター出来れば小さな再利用できる...まぁかけらでいいか、かけらで複雑なアプリケーションを作り出すことができるんだって。

##javascriptについて

Reactはjavascriptライブラリなので、javascriptの基礎知識が前提になっている。なのでjavascriptについて自身がないなと感じたのなら、[ここ(そのままなので英語だけど)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)でjavascriptについての知識をリフレッシュすることをおすすめしています。

私たちはまた、例文の中でES6の構文を幾つか使用します。これについてはまだ比較的に新しいので控えめに使用を試みますが、`arrow functions`/` classes`/`template literals`/`let`/`const`などのstatementについて知識を得ることを奨励しています。
`Babel`なんかも使えるよって。

#Introducing JSX

下記変数宣言について考えます。

```
const element = <h1>Hello, world!</h1>;
```

これはHTMLでも文字列でもありません。
JSXと呼ばれ、javascriptの拡張構文(syntax extension)です。
UIの外観を記述するのにはこれを利用するのをおすすめしています。
JSXはテンプレートエンジンを思い出すかもしれませんが、これはjavascriptのフルパワーがついています。

JSXはReact"element"を生成します。次のセクションでDOMへの描画を調査します。その前に、JSXを始めるのに必要な基礎知識を理解しましょう。

##Embedding Expressions in JSX

任意のjavascript表現を中括弧で囲んでJSXに組み込むことができるようです。
例えば、`2 + 2`, `user.firstName`, and `formatName(user)`これらはすべて妥当な表現です。

```javascript:code
function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);
```

[CodePenで試してみる](http://codepen.io/gaearon/pen/PGEjdG?editors=0010)
可読性のために複数の行二分割してJSXを書いているらしい。これ自体は必須ではないけど、自動セミコロン挿入の落とし穴？を避けるためにカッコで囲むことをおすすめしてるんだって。

##JSX is an Expression Too
コンパイル後にJSX表現(式)はjavascriptオブジェクトになる。これは、JSXをif文とforループの内部で使用し、変数に代入し、引数として受け取り、関数から戻すことができることを意味します。

```javascript:code
function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}
```

##Specifying Attributes with JSX

属性の中で文字列を使いたい場合は`"`を使う。(quotesってduoble quoteのことなの？複数形だから？

```javascript:code
const element = <div tabIndex="0"></div>;
```

また、属性の中でJSXを記述したい場合は中括弧`{}`を使う。

```javascript:code
const element = <img src={user.avatarUrl}></img>;
```

属性にjavascriptを埋め込む時には中括弧を`"`で囲んではだめです。その場合は式としてではなく文字列として扱われてしまいます。
両方を同じ属性の中で扱うことはできません。

##Specifying Children with JSX

もしタグの中身画からの場合はXMLのように`/>`で即座にタグを閉じることができる。

```javascript:code
const element = <img src={user.avatarUrl} />;
```

また、JSXタグは子を持つこともできる

```javascript:code
const element = (
  <div>
    <h1>Hello!</h1>
    <h2>Good to see you here.</h2>
  </div>
);
```

>ここで警告
>基本的にJSXはHTMLというよりもjavascriptに近いため、ReactDomは従来`HTML Attribute names`の代わりに`camelCase`を使用します。
>例としては`class`は`className`/`tabindex`は`tabIndex`になります。

##JSX Prevents Injection Attacks(インジェクション攻撃を防ぐ…的な)

基本的にはデフォルトでエスケープされます。明示的に書かれていない値は挿入されない絶対に入ってこないようです。すべてがレンダリング時に文字列に変換されるそうです。これでXSSをふせぐことができる…みたいですね。

##JSX Represents Objects

Babel compiles JSX down to React.createElement() calls.(これうまく日本語に訳せないというかちょっと意味わからん。`Babel`は`React.createElement`の呼び出しによりJSXをコンパイルします？？？？down toをどう訳したらいいかがよくわからない)
下記2つの例は同一のものになる。

```
const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
```

```
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);
```

`React.createElement`はあなたがバグのないコードを書くための手助けとして幾つかのチェックを行うが、本来は下記のようなオブジェクトをつくる。

```
// Note: this structure is simplified
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world'
  }
};
```

これらのオブジェクトは`React elements`と呼ばれている。これがスクリーン上でどのように見せるかを説明していると考えるといいようだ。Reactはそれらのオブジェクトを読み、DOMを構築するのに使い、それを最新に保ち続ける。

次のセクションでは`React elements'がどのようにDOMを描画しているかを調べましょう。