inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] React로 NodeBird SNS 만들기

input form 속도 관련 질문입니다.

856

자유인

작성한 질문수 17

0

똑같은 소스코드인데, 모달 창 내에서는 정상적으로 작동하는데 페이지 컴포넌트에서는 느리게 입력되네요.. 불필요한 리렌더링 때문인가요?

소스 코드는 여기 있습니다.

// pages/login.js
const Login = (props) => {
  const DynamicLayout = dynamic(() => import("../layouts/NoParallaxLayout"), {
    loading: () => <LinearLoading />,
  });
  const [cardAnimaton, setCardAnimation] = useState("cardHidden");
  setTimeout(() => {
    setCardAnimation("");
  }, 700);
  const classes = useStyles();
  const { locale } = props;

  const [inputs, onChangeInputs] = useMultipleInput({
    email: "",
    password: "",
  });
  const { email, password } = inputs;

  const inputRef = {
    email: useRef(),
    password: useRef(),
  };
  const handleKeyPress = useCallback(
    (e) => {
      if (e.key === "Enter") {
        switch (e.target.name) {
          case "email":
            return inputRef.password.current.focus();
          case "password":
          default:
            return () => console.log("input result");
        }
      }
    },
    [inputRef],
  );

  const onSubmitHandler = useCallback(() => {
    console.log(inputs);
  }, []);
  console.log(locale);
  console.log(inputs);

  return (
    <>
      <Head>
        <title>Login</title>
      </Head>
      <DynamicLayout>
        <GridItem xs={12} sm={12} md={4}>
          <Card className={classes[cardAnimaton]}>
            <SocialLoginSection color="primary" classes={classes} />
            <p className={classes.divider}>Or with Classical Method</p>
            <form className={classes.form} onSubmit={onSubmitHandler}>
              <CardBody>
                <EmailInput
                  value={email}
                  inputRef={inputRef.email}
                  onChange={onChangeInputs}
                  onKeyPress={handleKeyPress}
                />
                <PasswordInput
                  value={password}
                  inputRef={inputRef.password}
                  onChange={onChangeInputs}
                  onKeyPress={handleKeyPress}
                />
              </CardBody>
              <CardFooter className={classes.cardFooter}>
                <Button simple color="primary" size="lg">
                  로그인
                </Button>
              </CardFooter>
            </form>
          </Card>
        </GridItem>
      </DynamicLayout>
    </>
  );
};

// hooks /useMultipleInput
import { useState, useCallback } from "react";

const useMultipleInput = (initValue = null) => {
  const [inputs, setter] = useState(initValue);
  const handler = useCallback((e) => {
    e.preventDefault();
    const { name, value } = e.currentTarget;
    setter({
      ...inputs,
      [name]: value,
    });
  }, []);
  return [inputs, handler, setter];
};

export default useMultipleInput;

express nodejs react redux Next.js

답변 2

0

자유인

헉! form부분만 따로 빼니 속도문제 바로 해결됐어요! 감사합니다:)

0

제로초(조현영)

const DynamicLayout = dynamic(() => import("../layouts/NoParallaxLayout"), {
    loading: () => <LinearLoading />,
  });
이거 컴포넌트 내부에 넣으면 리렌더링시마다 매번 불러와서 느릴 수 있어요

넥스트 버젼 질문

0

77

2

로그인시 401 Unauthorized 오류가 뜹니다

0

89

1

무한 스크롤 중 스크롤 튐 현상

0

174

1

특정 페이지 접근을 막고 싶을 때

0

103

2

createGlobalStyle의 위치와 영향범위

0

96

2

인라인 스타일 리렌더링 관련

0

91

2

vsc 에서 npm init 설치시 오류

0

146

2

nextjs 15버전 사용 가능할까요?

0

158

1

화면 새로고침 문의

0

121

1

RTK에서 draft, state 차이가 있나요?

0

153

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

372

1

sudo certbot --nginx 에러

0

1273

2

Minified React error 콘솔에러 (hydrate)

0

469

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

247

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

325

1

npm run build 에러

0

518

1

front 서버 npm run build 중에 발생한 에러들

0

381

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

337

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

286

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

237

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

201

1