Reactチュートリアルをやっていってみるその7

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

Developer Tools

ブラウザの開発ツールでReactのコンポーネントツリーを表示させるために以下のツールを導入すると良い。
chrome用のリンク chrome.google.com

gyazo.com

CodePenを使う場合はDebug modeを利用して行うため、手順が異なる点注意。

ゲームを完成させる

現在の状態ではXだけが置かれる状態なので、OとXが交互に置かれるようにしていく。

stateのリフトアップ

Boardが各Squareに現時点のstateがどうなっているか問い合わせるだけで可能だが、
リファクタリングしにくく、コードも分かりにくいものになるのでよろしくない。
ベストな選択はゲームの状態を各Squareに持たせるのではなく、親のBoardコンポーネントで保持する。
Board側はSquareにpropsを渡すことで表示するべきものが判断できる。

Boardコンポーネントにコンストラクタを追加し、マスにnullをセットするよう追加。
gyazo.com

renderSquareが渡された値を読めるように修正。 gyazo.com

これで仕組みとしてはX,0,nullの値を受け取るようになった。
BoardからSquareにイベント通知をしてSquareに関数を呼んでもらうようにする。

gyazo.com

handleClickを定義していく

gyazo.com

この変更でBoardコンポーネントが制御されたコンポーネントとなり、
BoardコンポーネントがSquareコンポーネントを全面的に制御するようになっている。
handleClickでは.slice()を呼んで配列のコピーを作成している。

今日はここまで。

Reactチュートリアルをやっていってみるその6

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

インタラクティブコンポーネントを作る

Squareコンポーネントがクリックされた場合に"X"と表示されるようにする

まずはSquareをクリックするとブラウザでアラートが表示されるように変更
gyazo.com

アラートが表示されました。
gyazo.com

いちいちアラートが出ては困るので、stateを使ってSquareコンポーネントに自分がクリックされたことを記憶しておき、"X"マークで、マスを埋めるように変更する。
Reactコンポーネントはコンストラクタでthis.stateを設定することで状態を持つことができるようになる。

Squareコンポーネントにコンストラクタを追加する。
JavaScriptのクラスではサブクラスのコンストラクタを定義する際にはsuperを呼ぶ必要がある。
gyazo.com

Sqareコンポーネントのrenderメソッドを書き換えてクリックされた時にstateの場所を表示するようにする。

gyazo.com

クリックした場所にXが表示されるようになりました。

gyazo.com

今日はここまで。

Reactチュートリアルをやっていってみるその5

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

データを Props 経由で渡す

BoardコンポーネントにSquareコンポーネントへ値を渡すよう追記

gyazo.com

Squareコンポーネントのrenderメソッドで渡された値を表示するよう書き換える。
gyazo.com

変更前は空白だった部分が
gyazo.com このように数字が描画されるようになりました。
gyazo.com

描画されてる数字はもともと入っていた部分の数字が描画されてます。

gyazo.com

明日はインタラクティブコンポーネントを作るです。

今日はここまで。

Reactチュートリアルをやっていってみるその4

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

スターターコードの中身を確認する

スターターコードは以下 https://codepen.io/gaearon/pen/oWWQNa?editors=0010

オンラインだとCSS、HTMLも準備されているのでJS部分に集中して学習すれば良いらしい。

スターターコードでは3つのコンポーネントがある。
 ・Square(正方形のマス目)
 ・Board(盤面)
 ・Game

Squareコンポーネント

TODOとなっていて、これから実装していく感じになってます。
ここではbuttonをレンダーするようにしたいようです。

Boardコンポーネント

マス目のレンダリングをしています。

        <div className="board-row">
          {this.renderSquare(0)}
          {this.renderSquare(1)}
          {this.renderSquare(2)}
        </div>

Gameコンポーネント

盤面とプレースホルダーを描画するように作られています。
丸やバツを描画するような仕組みを作っていくことになるようです。

今日はここまで。

Reactチュートリアルをやっていってみるその3

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

概要

Reactは宣言型で効率的かつ柔軟なJavaScriptライブラリ。
UIをコンポーネントという独立した部品として扱うことで簡単に作ることができるようにしている。

まずはReact.Componentから。

class ShoppingList extends React.Component {
  render() {
    return (
      <div className="shopping-list">
        <h1>Shopping List for {this.props.name}</h1>
        <ul>
          <li>Instagram</li>
          <li>WhatsApp</li>
          <li>Oculus</li>
        </ul>
      </div>
    );
  }
}

// Example usage: <ShoppingList name="Mark" />

ShoppingListはReactのコンポーネントのクラスあるいはReactコンポーネントの型。
コンポーネントはpropsパラメータを受け取り、renderメソッドから表示するビューの階層構造を返す。

renderではReact要素と呼ばれる軽量な記述形式を返す。
React開発者は"JSX"と呼ばれる構文を使用している。

~

の部分はコンパイル後にReact.createElement('div')に変換される。

JSXではJavaScriptのほぼ全ての機能を利用することができる。

今日はここまで。

Reactチュートリアルをやっていってみるその2

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

チュートリアルの準備

チュートリアルの進め方は二種類あるので好きな方を選ぶ。
 ・オンラインの環境
  →https://codepen.io/gaearon/pen/oWWQNa?editors=0010

 ・ローカルに環境を作る
  →今回はこちらでやる。TypeScriptの組み合わせもやりたいので

困ったらコミュニティがあるのでそこを参照したりDiscodeに問い合わせすると良いそうだ。

ja.reactjs.org

discordapp.com

準備だけして、今日はここまでにします。

Reactチュートリアルをやっていってみるその1

これは

Reactチュートリアルをやっていく記事です。

参考

ja.reactjs.org

チュートリアル:React の導入

昨日までTypeScriptをやってましたが、今日からはReactのチュートリアルをやっていきます。
今回これを思い立ったのはこんな記事を読んだので、組み合わせて手を動かしながらReactとTypeScriptに慣れていけばいいんじゃないかと思ったからです。

qiita.com

チュートリアルを始める前に

早速やっていきます。 Reactチュートリアルは結構きれいな日本語になっているので読みやすくて良いですね。

チュートリアル○×ゲームの制作を通して
準備、概要、ゲームを完成させる、タイムトラベル機能の追加を行っていく形式になっています。

作るのはこれ。
https://codepen.io/gaearon/pen/gWWZgR?editors=0010

HTMLとJavaScript、あるいは他の言語に慣れていれば前提知識はクリア。

明日からはチュートリアルの準備をして、概要をやっていきたいと思います。

今日はここまで。