Reactjs에서 Twitter What's Happening Bar 양식 만들기

오늘 게시물에서는 usetheform + draftjs (React용 리치 텍스트 편집기 프레임워크)를 사용하여 Twitter에서 발생하는 양식 표시줄의 예를 빌드합니다.

🎉 최종 결과 🎉





소개



새 트윗을 게시하면 기본적으로 이미지, 동영상, 일반 텍스트, 이모티콘 등과 같은 정보 모음으로 구성되며 POST api를 통해 Twitter로 전송됩니다.

무슨 일이 일어나고 있는지 표시줄과 비슷한 것을 만들고 싶다면 웹 양식으로 개발하는 것을 생각할 수 있습니다.

웹 양식은
태그 내에 그룹화된 HTML 필드 요소 모음으로 구성됩니다. HTML은 예를 들어 다음과 같은 다양한 필드 요소를 지원합니다.

  • 사용자 입력을 위한 HTML 형식을 정의하는

  • 여러 줄 입력 컨트롤(텍스트 영역)을 정의하는 <textarea/>

  • 드롭다운 목록을 정의하는 구성 요소는 사용자가 선택한 개인 정보 값을 보유하는 "postPrivacy"라는 양식 내에 상태 조각을 만듭니다. 자세한 내용은 Input docs을 참조하십시오.

    언급할 가치가 있는 또 다른 구성 요소는
    formState의 다음 "조각"을 생성하고 처리합니다.

    const formState= {
       ....,
       gif: { ...gifProps }
    }
    


    ⚛️ 업로드Gif




    import React, { useEffect, useState } from "react";
    import { useField } from "usetheform";
    
    export const UploadGif = () => {
      const { setValue } = useField({ type: "custom", name: "gif" });
      const [showGrid, toggleGrid] = useState(() => false);
      const toggleGifGrid = () => toggleGrid((prev) => !prev);
      const onGifClick = (gif, e) => {
        e.preventDefault();
        setValue(gif);
        toggleGifGrid();
      };
      return (
        <div>
          <button type="button" onClick={toggleGifGrid}>
            <img alt="Upload GIF" src={UpladGifSVG} />
          </button>
          {showGrid && (
            <GifGrid onCloseGifGrid={toggleGifGrid} onGifClick={onGifClick} />
          )}
        </div>
      );
    };
    


    useField 후크를 사용하면 사용자 지정 입력 프리미티브를 빌드할 수 있습니다.
    사용자가 gif 이미지를 선택하면 콜백 함수가 호출되고 gif 객체가 formState로 푸시됩니다.

      const onGifClick = (gif, e) => {
        e.preventDefault();
        setValue(gif); // pushing into the formState
        toggleGifGrid();
      };
    


    useField에 대한 자세한 내용: useField doc

    마지막으로 살펴볼 구성 요소는 구성 요소입니다.

    ⚛️ 캐릭터 카운터




    import React from "react";
    import { useSelector } from "usetheform";
    import { ProgressRingBar } from "./../ProgressRingBar/ProgressRingBar";
    import { getProgressRingBarProps } from "./utils/getProgressRingBarProps";
    
    export const CharacterCounter = ({ maxChars }) => {
      const [plainText] = useSelector((state) => state.editor.plainText);
    
      const props = getProgressRingBarProps(plainText, maxChars);
    
      return (
        <ProgressRingBar {...props}  />
      );
    };
    


    CharacterCounter 구성 요소는 입력된 문자 수를 계산합니다. 이를 위해 getProgressRingBarProps라는 utils 함수를 사용하여 양식 상태에서 plainText를 선택하기 위해 useSelector 후크를 사용합니다.

    useSelector에 대한 자세한 내용: useSelector doc

    결론



    이 게시물을 즐겁게 읽으셨기를 바랍니다. 그렇다면 아래 버튼을 사용하여 공유하십시오. 🙏 읽어주셔서 감사합니다!
  • 좋은 웹페이지 즐겨찾기