>웹 프론트엔드 >JS 튜토리얼 >React 디자인 패턴~컨테이너 구성 요소 / 제어되지 않는 제어 구성 요소~

React 디자인 패턴~컨테이너 구성 요소 / 제어되지 않는 제어 구성 요소~

Barbara Streisand
Barbara Streisand원래의
2024-09-24 06:15:02689검색

React Design Patterns~Container Componets / Uncontrolled Controlled Component~

  • 제어되지 않는 구성요소

이 패턴은 React가 양식 데이터를 제어하지 않고 DOM이 양식 상태를 보유한다는 것을 의미합니다.

DOM에 액세스할 때 useRef 후크를 사용하여 ref 속성을 설정해야 합니다.

・src/comComponents/uncontrolled-form.jsx

import React from "react";

export const UncontrolledForm = () => {
  const nameInputRef = React.createRef();
  const ageInputRef = React.createRef();

  console.log("renedering");

  const SubmitForm = (e) => {
    console.log(nameInputRef.current.value);
    console.log(ageInputRef.current.value);

    e.preventDefault();
  };

  return (
    <form onSubmit={SubmitForm}>
      <input name="name" type="text" placeholder="Name" ref={nameInputRef} />
      <input name="age" type="number" placeholder="Age" ref={ageInputRef} />
      <input type="submit" value="Submit" />
    </form>
  );
};
  • 제어 구성요소

이 패턴은 React가 useState 후크를 사용하여 양식 데이터를 제어한다는 것을 의미합니다.

입력값을 완벽하게 제어하고 실시간으로 업데이트할 수 있습니다.

import React, { useEffect, useState } from "react";

export const ControlledForm = () => {
  const [errorMessage, setErrorMessage] = useState("");
  const [name, setName] = useState("");
  const [age, setAge] = useState();

  useEffect(() => {
    if (name.length < 1) {
      setErrorMessage("name can not be empty");
    } else {
      setErrorMessage("");
    }
  }, [name]);

  return (
    <form>
      {errorMessage&& <p>{errorMessage}</p>}
      <input
        type="text"
        name="name"
        placeholder="Name"
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
      <input
        type="number"
        name="age"
        placeholder="Age"
        value={age}
        onChange={(e) => setAge(e.target.value)}
      />
      <button>Submit</button>
    </form>
  );
};

위 내용은 React 디자인 패턴~컨테이너 구성 요소 / 제어되지 않는 제어 구성 요소~의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.