🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

LoginForm 컴포넌트에서 props로 setIsLoggedIn을 받아올 때 질문입니다!

22.04.28 22:54 작성 조회수 127

0

LoginForm 컴포넌트에서 AppLayout 컴포넌트의 props로 setIsLoggedIn을 받아올 때 밑에 빨간 줄이 뜨네요!

위 경고(?) 메시지가 떠서 구글 찾아보면서 propTypes 적용해봤는데
setIsLoggedIn이 isLoggedIn의 상태를 바꾸는 함수라 생각하여 아래와 같이 작성해봤는데 맞는지 여쭤보고 싶습니다!

빠르게 보시라고 LoginForm 컴포넌트 내용 전체 올릴게요!

import React, { useState, useCallback } from 'react';
import propTypes from 'prop-types';
import { Form, Input, Button } from 'antd';
import Link from 'next/link';
import styled from 'styled-components';

const ButtonWrapper = styled.div `
  margin-top: 10px;
`; // 백틱 안에는 CSS 적듯이 적으면 됨
// div 태그이면서 css가 적용된 ButtonWrapper 컴포넌트 사용 가능

const LoginForm = ({ setIsLoggedIn }) => {
  const [id, setId] = useState('');
  const [password, setPassword] = useState('');

  const onChangeId = useCallback((e) => {
    setId(e.target.value);
  }, []);

  const onChangePassword = useCallback((e) => {
    setPassword(e.target.value);
  }, []); 

  // 배열 안에 id, password 작성하지 않으면 초기값을 기억하기 때문에 넣어줘야 함
  const onSubmitForm = useCallback(() => {
    console.log(id, password);
    setIsLoggedIn(true);
  }, [id, password]);

  return (
    <Form onFinish={onSubmitForm}>
      <div>
        <label htmlFor="user-id">아이디</label>
        <br />
        <Input name="user-id" value={id} onChange={onChangeId} />
      </div>
      <div>
        <label htmlFor="user-password">비밀번호</label>
        <Input
          name="user-password" 
          type="password"
          value={password}
          onChange={onChangePassword}
          required
        />
      </div>
      <ButtonWrapper>
        <Button type="primary" htmlType="submit" loading={false}>로그인</Button>
        <Link href="/signup"><a><Button>회원가입</Button></a></Link>
      </ButtonWrapper>
    </Form>
  );
};

LoginForm.propTypes = {
  setIsLoggedIn: propTypes.func.isRequired,
};

LoginForm.defaultProps = {
  setIsLoggedIn: () => console.warn('setIsLoggedIn 값이 없습니다')
};

export default LoginForm;

 

답변 1

답변을 작성해보세요.

1

네 정확합니다!

재원허님의 프로필

재원허

질문자

2022.04.29

감사합니다:)

채널톡 아이콘