【マルバツゲーム】クリックしたマス目にxを表示するの巻

01 9マスの値を盤面のコンポーネントにまとめる

ところまでできた!

f:id:kobayashi8286:20181104233245p:plain

次は

・ XとOを交互につける

・勝ちを調べる

・勝敗がついたら、空欄のマス目をクリックしても反応しないようにする

の流れ。

今週平日中には終わらせたいな。

【マルバツゲーム】盤面を描画するの巻

・JSXの構文の中に波かっこ{}を使うと、JavaScriptの式が書けます。つまり、変数(プロパティ)を参照したり、関数(メソッド)が呼び出せるのです。

・Js・CSSが読み込めてない →えっていうかそもそもHTMLの知識なのでは

いまだにフォルダ構成とCSSの関係がよくわかっていない…

→ ☆chromeにreact用の拡張があるのでこれ使いました。https://qiita.com/pepo/items/beccd5f1e83ce2b93376

・このサイトのこの考え方超重要 「よくある効かないcssの原因」

  ①外部CSSファイル自体がそもそも読み込めていない

  ②idなのかclassなのか

  ③名前の付け方があっているかの確認

  ④そのcssの優先順位があっているかの確認

  ⑤cssの記述が全角文字や書式のミスで動いていない
  …

  書いた人は絶対頭イイ
    http://www.tecblo.com/other/1475.html

→ 外部ファイル化せずべた書きしたら通りましたー。 なんだそれ…

属性は変数としてコンポーネントのpropsプロパティに納められます.

例のサイト様の章立てに沿って書いてみました。

■01 コードを書く前に素材を整える

■02 マス目の要素をつくってページに差し込む

■03 9マスの盤面を組み立てる

 [ 
 class Square extends React.Component {
    render() {
        return (
            <button className="square">
            {this.props.value☆}
            </button>
        );
    }
}
]

 [ 
class Board extends React.Component {
    renderSquare(i) {
        return <Square value☆={i} />;
    }
]

■04 クリックしたマス目に印をつける

[・ECMAScript 6には、アロー関数式=>が採り入れられました]

このサイトほんとにすごい 天才か

記述がすごく豊富 偉い すごい

JSXで動的HelloWorld

本日の目標 ・JSXでHelloWorld → 完了!

・JSXで動的HelloWorld → 完了!

・マス目つくる

実行コマンド Node Packaged Modules(npm)

★buildの時点でエラー出てきた

./src/index.js

Line 5: 'App' is defined but never used no-unused-vars

[// 鉄板ぽい2つ

// import React from 'react';

// import ReactDOM from 'react-dom';

// import './index.css';

// コメントアウトした

// import App from './App'; // ここでエラー出てた 確かにimportしたけど使ってなかった]

CDNのアドレス古くなってた

こっちが最新ぽい

https://reactjs.org/docs/cdn-links.html


・動的につくる要素は、コンポーネントとして部品化できる。 → 具体的には、React.createClassメソッドを使う。

例えば [var コンポーネントのクラス名ShoppingList★ = React.createClass({

render: function() {

    return 要素の定め
    <div>hoge hoge {this.props.name☆}</div>;

}

});]

としておけば、render()する際の第一引数側(挿入する方の要素)に

タグ名?っぽく書いておけば呼び出せる。

コンポーネントの動的箇所は、

{this.props.タグ内の属性名name☆}

として代入している。

[ReactDOM.render( <ShoppingList★ name☆="Jane" />, document.getElementById('root') );]

コード002■コンポーネントからつくった要素を動的に表示する

Inline Babel script:1 Uncaught TypeError: React.createClass is not a function

なんかエラー出た

→ 主原因:ES6のBabelをDLしているのに、記法がES5だった()

詳しく:

・BabelはJsのコンパイラであるところ、JsにはECMAScript(エクマスクリプト)と呼ばれる標準記法が複数世代存在する。

    Wiki:https://ja.wikipedia.org/wiki/ECMAScript

・現在は5 → 6 へと。

    世代間で、通じる記法も異なる。

・今回CDNから引き込んでいるのは絵くまちゃんの6

<sc ript src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></sc ript>

・にも関わらず、ソース上は絵くまちゃん5用の書き方である、React.createClass()メソッドを

コンポーネント作成用に用いていた。

・→絵くまちゃん6の書き方  class クラス名 extends React.Component {

にしたら通った!

こちら参考にマルバツゲームに向けて進めています。 記載が丁寧!わかりやすい! http://www.fumiononaka.com/Business/html5/FN1704003.html

f:id:kobayashi8286:20181029221540p:plain

f:id:kobayashi8286:20181029221551p:plain

僕にもできた!Reaxt.jsでHelloWorld

超々初級

●React.jsとは ・JavaScriptフレームワーク(cf. AngularとかjQuery、Vew.js)

Facebookが開発

・Reactのソースはコンパイルする必要がある

・Reactは同時にJSXも使われることがある

・JSXを使うと、いきなりタグっぽい書き方ができる

    [var greeting = React.createElement('h1', null, 'Hi!');]

    ↓

    [var greeting = <h 1>Hi!</h 1>;]

    みたいな。

→何もせず書いてしまうと、ブラウザ側で

「ReactDOM.render()メソッドの引数変じゃない?」となりエラーになる

→ので、ブラウザがわかるように変換(コンパイル)するためにBabelを用いる

ex.CDNから引き込む等すればOK

[ ]

・「Reactは、コンポーネント指向のライブラリです。コンポーネント単位で細かくUIの部品を作り、最終的にそれらのコンポーネントを組み合わせてアプリケーションを構築します。」

・ 「render()メソッドの戻り値にJSXと呼ばれる構文を用いてUIを構築します。」

こちらのHP様を元に進めたところ、僕にもできました。 https://react.keicode.com/basics/jsx.php

文法(関数の使い方等)はこちらがわかりやすかった。 https://mae.chab.in/archives/2956

理論的なことが分かりやすく書いてある。すごい http://www.fumiononaka.com/Business/html5/FN1704003.html マルバツゲーム作ってみたい。

f:id:kobayashi8286:20181028144002p:plain

f:id:kobayashi8286:20181028144940p:plain