Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ksw_devlog

TIL 01.26 본문

TIL

TIL 01.26

kimcoach 2023. 1. 26. 21:57

어제 보았던 react hook form을 이용하여 게시글 작성 기능을 구현하였다.

import styled from 'styled-components';
import { useForm } from 'react-hook-form';
import { useMutation, useQueryClient } from 'react-query';
import { v4 as uuidv4 } from 'uuid';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
import { authService } from '../common/firebase';

export default function PostPage() {
  const queryClient = useQueryClient();
  const navigate = useNavigate()
  const addVideo = useMutation((video) => axios.post('http://localhost:3001/videos', video), {
    onSuccess: (data) => {
      console.log(data);
      queryClient.invalidateQueries(['videos']);
    },
    onError: (error) => {
      console.log(error);
    },
  });
  const { register, handleSubmit, formState: { isSubmitting } } = useForm();
  const onSubmit = (data) => {
    const Video = {
      contetnId: '1',
      createAt: Date(),
      userId: authService.currentUser.uid,
      nickName: authService.currentUser.displayName ?? '닉네임없음'  
    };
    const newVideo = Object.assign(Video, data);
    addVideo.mutate(newVideo);
    alert('작성 완료')
    navigate('/')
  }
  const onError = (error) => {
    console.log(error);
  }
  
  return (
    <Container>
      <Text>게시물 작성</Text>
      <Form onSubmit={handleSubmit(onSubmit, onError)}>
      <Input type={'url'} 
        maxLength={'120'} 
        placeholder='url'
        required
        {...register('videoUrl')} />
      <Input type={'text'} 
        maxLength={'120'} 
        placeholder='제목'
        required
        {...register('title')} />
      <Textarea type={'text'} 
        placeholder='내용' 
        required
        {...register('content')} ></Textarea>
      <BtnBox>
      <Button type='submit' style={{marginRight:'20px'}} disabled={isSubmitting}>완료</Button>
      <Button type='button' onClick={()=>navigate(-1)}>취소</Button>
      </BtnBox>
      </Form>
    </Container>
  )
}

register : 글을 작성할 때 사용

handleSubmit : 입력한 내용 전달할 때 사용

 

다른 방법과 달리 input창에 {...register('videoUrl')}을 적어주면 입력한 내용이 전달된다.

+ 새로 접한 라이브러리로 협업을 하다보니 팀원들이 코드 이해하는데 어려워하는 것 같다.

PR하기전에 주석을 남겨서 해야될 것 같다.

 

 

'TIL' 카테고리의 다른 글

WIL 13주차  (0) 2023.01.30
TIL 01.27  (0) 2023.01.29
TIL 01.25  (0) 2023.01.25
WIL 12주차  (0) 2023.01.24
TIL 12주 5일차 - Type script  (0) 2023.01.24