0Pricing
Next.js 15 Fullstack Web Apps · レッスン

制御コンポーネントと状態

Reactの制御コンポーネントパターンを使ってフォーム入力値を管理し、予測可能な動作を実現します。

「制御コンポーネントと状態」はCoddyKit上の無料Next.js 15 Fullstack Web Appsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはNext.js 15 Fullstack Web Apps学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Next.js 15 Fullstack Web Appsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

Forms: User Interaction Hub

Forms are essential for almost any web application! They allow users to input information, make choices, and interact with your app.

Think about login screens, search bars, feedback forms, or even shopping cart quantity selectors – all rely on forms.

Uncontrolled Inputs: A Quick Look

In plain HTML, input elements manage their own state. When you type into an <input>, its value updates internally.

In React, these are called uncontrolled components. While simple for static forms, they can be tricky to integrate with React's dynamic UI updates and state management.

Meet Controlled Components

Controlled components are input elements whose values are controlled by React state. Instead of the DOM managing the input's value, your React component's state becomes the 'single source of truth'.

This gives you full control over the form data, making it predictable and easier to manage.

The Core: `value` & `onChange`

Two props are key to controlled components:

  • value: Sets the current displayed value of the input. It should always come from your component's state.
  • onChange: A function that gets called whenever the input's value changes (e.g., user types). This function updates your component's state.

Controlled Text Input in Action

Let's see a basic controlled text input. We use useState to hold the input's value and update it with onChange.

Try typing in the input below:

import React, { useState } from 'react';

function App() {
  const [name, setName] = useState('');

  const handleChange = (event) => {
    setName(event.target.value);
  };

  return (
    <div>
      <label>Your Name:</label>
      <input
        type="text"
        value={name}
        onChange={handleChange}
      />
      <p>Hello, {name || 'stranger'}!</p>
    </div>
  );
}

State is the Single Source of Truth

Here's the flow for a controlled input:

  1. The input's value prop is set by React state (e.g., name).
  2. User types a character.
  3. The onChange event fires, calling handleChange.
  4. handleChange updates the state (setName).
  5. React re-renders the component.
  6. The input's value prop is now updated with the new state, displaying the typed character.

Other Controlled Elements

The same value and onChange pattern applies to other form elements like <textarea> and <select>.

For <select>, the value prop is set on the <select> tag itself, not on individual <option> tags.

import React, { useState } from 'react';

function App() {
  const [feedback, setFeedback] = useState('');
  const [fruit, setFruit] = useState('apple');

  return (
    <div>
      <label>Your Feedback:</label>
      <textarea
        value={feedback}
        onChange={(e) => setFeedback(e.target.value)}
        rows="3"
      />
      <p>Feedback: {feedback}</p>

      <label>Favorite Fruit:</label>
      <select
        value={fruit}
        onChange={(e) => setFruit(e.target.value)}
      >
        <option value="apple">Apple</option>
        <option value="banana">Banana</option>
        <option value="orange">Orange</option>
      </select>
      <p>Selected: {fruit}</p>
    </div>
  );
}

Why Control Matters

Controlling your form inputs provides many benefits:

  • Instant Validation: Validate input as the user types.
  • Conditional Logic: Enable/disable buttons based on input state.
  • Formatted Input: Automatically format phone numbers or currencies.
  • Easy State Access: Always know the current value of any input.
  • Predictable Behavior: Your UI always reflects your application's state.

Managing Many Inputs

For forms with multiple inputs, you can use a single state object and a generic onChange handler. The name attribute of the input helps identify which state property to update.

import React, { useState } from 'react';

function App() {
  const [formData, setFormData] = useState({
    username: '',
    email: ''
  });

  const handleChange = (event) => {
    const { name, value } = event.target;
    setFormData(prevData => ({ ...prevData, [name]: value }));
  };

  return (
    <form>
      <label>Username:</label>
      <input
        type="text"
        name="username"
        value={formData.username}
        onChange={handleChange}
      />
      <label>Email:</label>
      <input
        type="email"
        name="email"
        value={formData.email}
        onChange={handleChange}
      />
      <p>User: {formData.username}, Email: {formData.email}</p>
    </form>
  );
}

Controlled Input Challenge

Which of the following are key characteristics of a controlled component in React?

Recap: Controlled & Predictable

You've learned about controlled components!

  • They link input values directly to React state.
  • They use the value prop for display and an onChange handler to update state.
  • This pattern provides full control, enabling features like instant validation and predictable behavior.
  • It applies to <input>, <textarea>, and <select> elements.

Mastering controlled components is a crucial step for building robust forms in Next.js applications!

よくある質問

「制御コンポーネントと状態」レッスンは無料ですか?

はい。「制御コンポーネントと状態」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Next.js 15 Fullstack Web Appsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Next.js 15 Fullstack Web Appsコースには全4レッスンが含まれています。

「制御コンポーネントと状態」で何を学びますか?

Reactの制御コンポーネントパターンを使ってフォーム入力値を管理し、予測可能な動作を実現します。 ブラウザで直接実行するハンズオンコードでNext.js 15 Fullstack Web Appsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Next.js 15 Fullstack Web Appsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのNext.js 15 Fullstack Web Appsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「制御コンポーネントと状態」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このNext.js 15 Fullstack Web Appsレッスンでコードを書いて実行できますか?

はい。すべてのNext.js 15 Fullstack Web Appsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 制御コンポーネントと状態
  2. React Hook Formによるフォームバリデーション
  3. Server Actionsによるフルスタックフォーム
  4. ファイルアップロードとマルチパートフォーム処理
← Next.js 15 Fullstack Web Appsに戻る