1 분 소요

Project

팀 프로젝트 컴포넌트 만들기

React 팀 프로젝트

github issue & projects

github issue에 필요한 작업들 모두 생성한다.

label은 high priority와 low priority만 일단 생성하고, 기본적으로 하는 작업에는 따로 label을 달지 않는다.

projects와 연동하여 todo -> in progress -> review -> done으로 관리한다.

컴포넌트 만들기

Input Components

  • TextInput

      id: PropTypes.string,
      placeholder: PropTypes.string,
      onChange: PropTypes.func.isRequired,
      value: PropTypes.string.isRequired,
    

    id: 사용 컴포넌트의 편의성을 위해 (e.target.id로 사용) 추가
    placeholder: input 안내
    onChange: input value를 감지하는 함수
    value: input의 value

  • SelectInput

    const SelectInput = ({ id, defaultOption, onChange, value, options }) => (
      <Select id={id} onChange={onChange} value={value}>
        <option value="">{defaultOption}</option>
        {options.map((option) => (
          <option key={option} value={option}>
            {option}
          </option>
        ))}
      </Select>
    );
    

    기본 옵션을 defaultOption으로 받고, 선택 옵션들을 options 배열로 받는다.

  • StarsInput

    • 사용 컴포넌트

      function App() {
        const [currentStars, setCurrentStars] = useState(0);
      
        const handleStarClick = (star) => setCurrentStars(star);
      
        return (
          <div className="App">
            <StarsInput
              placeholder="별점을 입력하세요"
              currentValue={currentStars}
              onClick={handleStarClick}
            />
          </div>
        );
      }
      

      StarsInput을 사용하는 컴포넌트에서 현재 선택된 별점 점수 state를 관리해야한다.

    • StarsInput 컴포넌트

      const starsArr = [1, 2, 3, 4, 5];
      
      const StarsInput = ({ placeholder, currentValue, onClick }) => {
        return (
          <Container>
            <Stars>
              {starsArr.map((star) => (
                <Star
                  key={star}
                  src={star > currentValue ? grayStar : blueStar}
                  alt={`별점 ${star}점 선택`}
                  onClick={() => onClick(star)}
                />
              ))}
              <span>{currentValue}</span>
            </Stars>
            <p>{placeholder}</p>
          </Container>
        );
      };
      

      별점 선택할 때에는 이미지를 하나씩 5개로 나타냈다. 상위 컴포넌트에서 set되는 currentValue가 map 돌고 있는 star(숫자)보다 작은 경우에만 선택된 것으로 간주하여 blueStar로 나타낸다.

Input 컴포넌트는 일단 모두 만들었다.

하지만, FileInput은 실제 파일을 프론트에서 S3에 등록하고 url만 백엔드로 넘겨주는 것이므로 실제 파일을 어떻게 상위 폴더로 가져갈 수 있는지에 대해 아직 알지 못한다.

file 입력 구현할 때 수정이 필요할 수도 있을 듯 하다.

댓글남기기