React-tags: μ‚¬μš© μƒνƒœ

에 λ§Œλ“  2021λ…„ 02μ›” 26일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: i-like-robots/react-tags

이 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 후크와 μƒνƒœλ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” λ¬Έμ„œμ—μ„œ μ–΄λ–€ μ˜ˆλ„ 보지 λͺ»ν–ˆλ‹€.

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

후크λ₯Ό μ‚¬μš©ν•˜μ—¬ μΉœμ ˆν•˜κ²Œ κ³΅μœ ν•  수 μžˆλŠ” μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ? μ œμ–΄λœ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

import React, { useState, useRef } from 'react'

export default function MyForm() {

  const tagsInput = useRef(null);

  const [tags, setTags] = useState([]);
  const [suggestions, setSuggestions] = useState([]);
  const [tagAutocompleteBusy, setTagAutocompleteBusy] = useState(false);

  async function onTagInput(query) {
      if (!tagAutocompleteBusy) {
          setTagAutocompleteBusy(true);
          const result = await fetch(`/tags/autocomplete?term=${query}`);
          setSuggestions(result.data);
          setTagAutocompleteBusy(false);
          return result;
      }
  }

  const onTagDelete = (i) => {
      setTags(() => {
          tags.splice(i, 1);
          return tags;
      });
  }

  const onTagAddition = (tag) => {
      setTags(() => {
          return [...tags, tag];
      });
  }

  return (<>
    <ReactTags
        ref={tagsInput}
        tags={tags}
        suggestions={suggestions}
        onDelete={onTagDelete}
        onAddition={onTagAddition}
        onInput={onTagInput}
    />
  </>);
}

λͺ¨λ“  4 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”, 예, ꡬ성 μš”μ†ŒλŠ” 클래슀 기반 ꡬ성 μš”μ†Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ useState() μ—μ„œλ„ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

후크λ₯Ό μ‚¬μš©ν•˜μ—¬ μΉœμ ˆν•˜κ²Œ κ³΅μœ ν•  수 μžˆλŠ” μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ? μ œμ–΄λœ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

후크λ₯Ό μ‚¬μš©ν•˜μ—¬ μΉœμ ˆν•˜κ²Œ κ³΅μœ ν•  수 μžˆλŠ” μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ? μ œμ–΄λœ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

import React, { useState, useRef } from 'react'

export default function MyForm() {

  const tagsInput = useRef(null);

  const [tags, setTags] = useState([]);
  const [suggestions, setSuggestions] = useState([]);
  const [tagAutocompleteBusy, setTagAutocompleteBusy] = useState(false);

  async function onTagInput(query) {
      if (!tagAutocompleteBusy) {
          setTagAutocompleteBusy(true);
          const result = await fetch(`/tags/autocomplete?term=${query}`);
          setSuggestions(result.data);
          setTagAutocompleteBusy(false);
          return result;
      }
  }

  const onTagDelete = (i) => {
      setTags(() => {
          tags.splice(i, 1);
          return tags;
      });
  }

  const onTagAddition = (tag) => {
      setTags(() => {
          return [...tags, tag];
      });
  }

  return (<>
    <ReactTags
        ref={tagsInput}
        tags={tags}
        suggestions={suggestions}
        onDelete={onTagDelete}
        onAddition={onTagAddition}
        onInput={onTagInput}
    />
  </>);
}

@kulahin 예제λ₯Ό κ³΅μœ ν•  μ‹œκ°„μ„ λ‚΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

filippofilip95 picture filippofilip95  Β·  4μ½”λ©˜νŠΈ

yrik picture yrik  Β·  4μ½”λ©˜νŠΈ

ekinalcar picture ekinalcar  Β·  10μ½”λ©˜νŠΈ

luciemac picture luciemac  Β·  7μ½”λ©˜νŠΈ

thienanle picture thienanle  Β·  9μ½”λ©˜νŠΈ