7
章7
Stateによるインタラクティブ性の追加
Reactが**state**と**イベントハンドラ**を使ってインタラクティブ性を追加するのにどのように役立つかを探ってみましょう。
例として、HomePage
コンポーネント内に「いいね」ボタンを作成してみましょう。まず、return()
文の中にボタン要素を追加します。
function HomePage() {
const names = ['Ada Lovelace', 'Grace Hopper', 'Margaret Hamilton'];
return (
<div>
<Header title="Develop. Preview. Ship." />
<ul>
{names.map((name) => (
<li key={name}>{name}</li>
))}
</ul>
<button>Like</button>
</div>
);
}
イベントのリッスン
ボタンがクリックされたときに何かを実行させるには、onClick
イベントを使用できます
function HomePage() {
// ...
return (
<div>
{/* ... */}
<button onClick={}>Like</button>
</div>
);
}
Reactでは、イベント名はキャメルケースで記述されます。onClick
イベントは、ユーザーのインタラクションに応答するために使用できる多くのイベントのうちの1つです。例えば、入力フィールドにはonChange
を、フォームにはonSubmit
を使用できます。
イベントの処理
イベントがトリガーされたときに「処理」する関数を定義できます。return
文の前にhandleClick()
という関数を作成します。
function HomePage() {
// ...
function handleClick() {
console.log("increment like count")
}
return (
<div>
{/* ... */}
<button onClick={}>Like</button>
</div>
)
}
次に、onClick
イベントがトリガーされたときにhandleClick
関数を呼び出すことができます。
function HomePage() {
// ...
function handleClick() {
console.log('increment like count');
}
return (
<div>
{/* ... */}
<button onClick={handleClick}>Like</button>
</div>
);
}
これをブラウザで実行してみてください。開発者ツールでログ出力が増加することに注目してください。
Stateとフック
Reactには、フックと呼ばれる一連の関数があります。フックを使用すると、**state**などの追加ロジックをコンポーネントに追加できます。stateとは、UI内の時間とともに変化する情報で、通常はユーザーの操作によってトリガーされます。

ユーザーが「いいね」ボタンをクリックした回数を保存し、増やすためにstateを使用できます。実際、stateを管理するために使用されるReactフックは`useState()`と呼ばれます。
プロジェクトにuseState()
を追加します。これは配列を返し、その配列の値を**配列の分割代入**を使ってコンポーネント内でアクセスし、使用できます。
function HomePage() {
// ...
const [] = React.useState();
// ...
}
配列の最初の要素はstateのvalue
で、好きな名前を付けられます。記述的な名前を付けることが推奨されます。
function HomePage() {
// ...
const [likes] = React.useState();
// ...
}
配列の2番目の要素は、値を更新
するための関数です。更新関数には好きな名前を付けられますが、一般的にはset
の後に更新するstate変数の名前を付けてプレフィックスとするのが一般的です。
function HomePage() {
// ...
const [likes, setLikes] = React.useState();
// ...
}
また、likes
stateの初期値を0
に設定することもできます。
function HomePage() {
// ...
const [likes, setLikes] = React.useState(0);
}
その後、コンポーネント内でstate変数を使用して、初期stateが機能していることを確認できます。
function HomePage() {
// ...
const [likes, setLikes] = React.useState(0);
// ...
return (
// ...
<button onClick={handleClick}>Like({likes})</button>
);
}
最後に、HomePage
コンポーネントでstate更新関数setLikes
を呼び出せます。以前に定義したhandleClick()
関数内に追加しましょう。
function HomePage() {
// ...
const [likes, setLikes] = React.useState(0);
function handleClick() {
setLikes(likes + 1);
}
return (
<div>
{/* ... */}
<button onClick={handleClick}>Likes ({likes})</button>
</div>
);
}
これでボタンをクリックするとhandleClick
関数が呼び出され、現在の「いいね」数に1を加えた値を引数としてsetLikes
state更新関数が呼び出されます。
注: 関数パラメータの最初の引数としてコンポーネントに渡されるpropsとは異なり、stateはコンポーネント内で初期化され、保存されます。stateの情報を子コンポーネントにpropsとして渡すことはできますが、stateを更新するロジックは、stateが最初に作成されたコンポーネント内に保持されるべきです。
Stateの管理
これはstateの導入に過ぎず、Reactアプリケーションにおけるstateの管理とデータフローについては、さらに学ぶべきことがあります。詳細については、Reactのドキュメントにあるインタラクティブ性の追加とstateの管理のセクションを参照することをお勧めします。
その他のリソース
章を完了しました7
stateとイベントリスナーを使用して、アプリケーションに基本的なインタラクティブ性を追加しました。
これは役に立ちましたか?