Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Reactで挨拶

$
0
0

この記事は社内勉強会用として作られました。
Pro Reactという本を読みながら進みます。

本の内容と異なる部分

  • 本のサンプルをESlintとAirbnbのスタイルガイドに合わせて直しました。
  • create-react-appを用いてプロジェクトを生成しました。

本のサンプルはここで確認してください。

目次

Vimの設定

Vimの環境設定は他の記事で扱う予定です。
ここではReactを学ぶことが目的なので、下記のファイルでVimの環境設定を行なってください。

% cd ~
% git clone https://gitlab.com/devtopia/dotfiles.git
% ln -sf dotfiles/.vim .vim
% ln -sf dotfiles/.vimrc .vimrc
% ln -sf dotfiles/.eslintrc .eslintrc
% ln -sf dotfiles/.tern-project .tern-project

# Vimの設定ファイルからフラグインをインストール
% vim .vimrc
:PlugInstall!

rubyとjavascriptの場合はrubocopeslintのスタイルガイドを適用しています。
rubocopとeslintが先に設置されている必要があります。
gemとnpm(またはyarn)でそれぞれ設置してください。
vimprocというpluginを使うためgcc(make)、macOSの場合はxcodeが必要です。
xcodeが設置されてない方は次のコマンドで設置してください。

% sudo xcode-select --install

第一歩、挨拶

  • 新規
    • src/components/Hello.js
  • 修正

    • src/index.js
  • src/components/Hello.js

diff --git a/src/components/Hello.js b/src/components/Hello.js
new file mode 100644
index 0000000..1dc66a9--- /dev/null+++ b/src/components/Hello.js@@ -0,0 +1,11 @@+import React from 'react';++class Hello extends React.Component {+  render() {+    return (+      <h1>Hello World</h1>+    );+  }+}++export default Hello;
  • src/index.js
diff --git a/src/index.js b/src/index.jsindex 53c7688..219b78a 100644--- a/src/index.js+++ b/src/index.js@@ -1,8 +1,8 @@
 import React from 'react';
 import ReactDOM from 'react-dom';
-import App from './App';+import Hello from './components/Hello';
 import registerServiceWorker from './registerServiceWorker';
 import './index.css';

-ReactDOM.render(<App />, document.getElementById('root'));+ReactDOM.render(<Hello />, document.getElementById('root'));
 registerServiceWorker();

💡 Check

  • stateless componentについて調べてください。
  • stateless componentで修正してみましょう。

分割代入(Destructuring assignment)

  • 修正
    • src/components/Hello.js
diff --git a/src/components/Hello.js b/src/components/Hello.jsindex 1dc66a9..bae48e4 100644--- a/src/components/Hello.js+++ b/src/components/Hello.js@@ -1,6 +1,6 @@-import React from 'react';+import React, { Component } from 'react';-class Hello extends React.Component {+class Hello extends Component {
   render() {
     return (
       <h1>Hello World</h1>

Dynamic Values

  • 修正
    • src/components/Hello.js
diff --git a/src/components/Hello.js b/src/components/Hello.jsindex bae48e4..66b65fc 100644--- a/src/components/Hello.js+++ b/src/components/Hello.js@@ -2,8 +2,9 @@ import React, { Component } from 'react';

 class Hello extends Component {
   render() {
+    const place = 'World';
     return (
-      <h1>Hello World</h1>+      <h1>Hello {place}</h1>
     );
   }
 }

💡 Check

  • var, let, constについて調べてください。

Composing Components(props)

  • 新規
    • src/components/GroceryList.js
    • src/components/ListItem.js
  • 修正

    • src/index.js
  • src/components/GroceryList.js

diff --git a/src/components/GroceryList.js b/src/components/GroceryList.js
new file mode 100644
index 0000000..6fe4c05--- /dev/null+++ b/src/components/GroceryList.js@@ -0,0 +1,16 @@+import React, { Component } from 'react';+import ListItem from './ListItem';++class GroceryList extends Component {+  render() {+    return (+      <ul>+        <ListItem quantity="1" name="Bread" />+        <ListItem quantity="6" name="Eggs" />+        <ListItem quantity="2" name="Milk" />+      </ul>+    );+  }+}++export default GroceryList;
  • src/components/ListItem.js
diff --git a/src/components/ListItem.js b/src/components/ListItem.js
new file mode 100644
index 0000000..8285ebc--- /dev/null+++ b/src/components/ListItem.js@@ -0,0 +1,11 @@+import React, { Component } from 'react';++class ListItem extends Component {+  render() {+    return (+      <li>{this.props.quantity} x {this.props.name}</li>+    );+  }+}++export default ListItem;
  • src/index.js
diff --git a/src/index.js b/src/index.jsindex 219b78a..d690d95 100644--- a/src/index.js+++ b/src/index.js@@ -1,8 +1,8 @@
 import React from 'react';
 import ReactDOM from 'react-dom';
-import Hello from './components/Hello';+import GroceryList from './components/GroceryList';
 import registerServiceWorker from './registerServiceWorker';
 import './index.css';

-ReactDOM.render(<Hello />, document.getElementById('root'));+ReactDOM.render(<GroceryList />, document.getElementById('root'));
 registerServiceWorker();

💡 Check

  • コンポーネント間で情報の受け渡しについて調べてください。
  • single quotation('')とdouble quotation("")を変更しながら確認してみましょう。

Composing Components(props.children)

  • 修正

    • src/components/GroceryList.js
    • src/components/ListItem.js
  • src/components/GroceryList.js

diff --git a/src/components/GroceryList.js b/src/components/GroceryList.jsindex 6fe4c05..9a419b3 100644--- a/src/components/GroceryList.js+++ b/src/components/GroceryList.js@@ -5,9 +5,9 @@ class GroceryList extends Component {
   render() {
     return (
       <ul>
-        <ListItem quantity="1" name="Bread" />-        <ListItem quantity="6" name="Eggs" />-        <ListItem quantity="2" name="Milk" />+        <ListItem quantity="1">Bread</ListItem>+        <ListItem quantity="6">Eggs</ListItem>+        <ListItem quantity="2">Milk</ListItem></ul>
     );
   }
  • src/components/ListItem.js
diff --git a/src/components/ListItem.js b/src/components/ListItem.jsindex 8285ebc..f3904bb 100644--- a/src/components/ListItem.js+++ b/src/components/ListItem.js@@ -1,11 +1,17 @@
 import React, { Component } from 'react';

 class ListItem extends Component {
   render() {
     return (
-      <li>{this.props.quantity} x {this.props.name}</li>+      <li>{this.props.quantity} x {this.props.children}</li>
     );
   }
 }

 export default ListItem;

💡 Check

  • エラーを修正してください。
  • props validationについて調べてください。

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>