React JSX記法とhookの基礎[No.2]

  • JSXとは

  • React要素を生成する

  • コンポーネントを作る

  • スタイルを指定する

  • props

  • useState hook

  • useEffect hook

  • key

  • Input欄に入力された値を使う

  • useContext hook

JSXとは

React要素を生成することができる
htmlとJavascriptを一緒に記述できる
{}の内部にJavaScriptを記述する

React要素を生成する

複数のタグを生成する場合は一番親のタグを<>(React.Fragment)にする

import ReactDom from "react-dom";//ReactDomを使う

//React要素を生成
const App = () => {
  return (
  <>
    <h1>Hello</h1>
    <p>React</p>
  </>
  );
};

ReactDom.render(<App />, document.getElementById("root"));

コンポーネントを作る

別ファイルからコンポーネントをエクスポートする
コンポーネントの名前大文字から始まるキャメルケースにする
export default App;

import App from "./App";
<App />
それぞれに記載する

スタイルを指定する

jsx内では以下のように記載する

<h1 style={{color :'red'}}>Hello</h1>

オブジェクトを作って指定する

const pStyle ={
    color: 'green',
    border: 'solid',
    borderColor:'green'
  };

<p style={pStyle}>React</p>

props

コンポーネントの雛形を作るのに使う

引数にpropsを設定した親コンポーネントを作る
1ファイル1コンポーネントが基本
変数は{}で囲う

const Button = (props) => {
  const { children, color } = props;
  return <button className={color}>{children}</button>;
};

export default Button;
const Input = (props) => {
  const { placeholder } = props;
  return <input type="text" placeholder={placeholder} />;
};
export default Input;

子に親をインポートすると、タグとして親コンポーネントが使える

import Button from "./Button";
import Input from "./Input";

const InputInfoButton = () => {
  return (
    <>
    <div>
    <Input placeholder='名前'/>// Inputコンポーネント
    </div>
    <div>
    <Input placeholder='住所'/>// Inputコンポーネント
    </div>
    <Button color='red'>決定</Button>// Buttonコンポーネント
    </>
  );
};

Propsの応用
タグの中身はprops.children
オブジェクトの中身の変数がキーと一緒の場合は省略できる

const ColorfulMessage = (props) => {
  const{color, children} = props;
  const contentStyle = {
    color,// :colorを省略している
    fontSize: "18px"
  };
  return <p style={contentStyle}>{children}</p>;// 呼び出し元ではchildren=と書いてない
};

export default ColorfulMessage;

useState hook

ユーザーの操作を画面に反映させるのに使う
const [変数, 操作する関数名] = useState(初期値)
  onClickの中
callback関数を書く()をつけない
引数を取りたい場合はアロー関数(無名)にする

import {useState} from 'react';//useStateをインポートして使う

const CountUpButton = () => {
  const onClickCountUp = ()=> {
    countUp(count + 1);
  }
  const [count, countUp] = useState(0);// ⇦これ

  return (
    <>
      <h2>カウンター{count}</h2>
      <button onClick={onClickCountUp}>+1ボタン</button>
    </>

  );
};

メモ 
flagがtrueの時だけ処理を実行する
flag && 処理

flagがfalseの時だけ処理を実行する
flag || 処理

useEffect

再レンダリングされた時に実行される
useEffect関数内に処理を記載(アロー関数かcallback関数)
第二引数に連動する引数を配列で記載

import { useEffect } from "react";// インポートする

useEffect(() => {
    hoge();
  },[hogehoge]);

key

map関数を使うときに必ず設定する

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>
      {number}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

returnの中でmapを使うと{}の位置が変わるので注意

Input欄に入力された値を使う

useStateで値を管理する

const Input = () => {
  const [sentece, setSentence] = useState("");// 入力欄の内容
  const [textMessage, setTextMessage] = useState('入力内容');// 書き換える内容

  const changeText = (e) => {
    setSentence(e.target.value);// ここに<input>の値が格納されている
  };

  const dispText = () => {
    setTextMessage(sentece);
  };
  return (
    <>
      <input placeholder="入力欄" value={sentece} onChange={changeText}></input>
      <button onClick={dispText}>確定</button>
      <h1>{textMessage}</h1>
    </>
  );
};

useContext コンポーネントを跨いでuseStateを使用する

親コンポーネント

createContextをインポート
Contextをエクスポートする
Contextを操作するためのuseStateを用意する名前はvalue
使用範囲を<Context.Provider value={value}>で囲う


import MenuImage from './MenuImage';
import FooterTotal from './FooterTotal';
import { createContext, useState } from 'react';  //インポート

export const TotalContext = createContext()// Contextをエクスポートしている

function App() {
//---valueを初期化---
  const[total, setTotal] = useState(0);
  const value = {
    total,
    setTotal,
  }

  return (
    <>
      <Title>鴨緑江注文シミュレーター</Title>
      <TotalContext.Provider value={value}> //ここかkら
      <MenuImage name='カルビ' price='990'></MenuImage>
      <FooterTotal>合計金額は{value.total}円</FooterTotal>
      </TotalContext.Provider>// ここまで
    </>
  );
}

export default App;

子コンポーネント

useContext インポート
親のContextをインポート
valueにContextを代入
valueの値に関する処理を書く

import { useState, useContext } from "react"; //インポート
import "./CSS/menuImage.css";
import { TotalContext } from "./App"; //親からインポート

const MenuImage = (props) => {
    const {name,price,} = props;

    const value = useContext(TotalContext);

  const pulus = () => {
    setQuantity(quantity + 1);
    value.setTotal(Number(value.total) + Number(price)); //valueを操作
  };

この記事が気に入ったらサポートをしてみませんか?