테스트 사이트 - 개발 중인 베타 버전입니다

자바스크립트 query select 질문 혹시 가능할까요? 채택완료

루2 4년 전 조회 1,820

import React, {useState} from 'react';

import './reset.css'

import './common.scss'

import './login.scss'

import Footer from "./Footer"

 

const form = document.querySelector(".js-form"),

      input = form.querySelector("input"),

      gretting = document.querySelector(".js-grettings")

 

    const USER_ID = "currentUser",

          showing_cn = "showing"

 

    function saveName(text) {

        localStorage.setItem(USER_ID, text);

    }

 

    function askForName() {

        form.classList.add(showing_cn);

        form.addEventListener("submit",handleSubmit)

    }

 

    function handleSubmit(event) {

        event.preventDefault();

        const currentValue = input.value;

        paintGretting(currentValue);

        saveName(currentValue);

    }

 

    function paintGretting(text) {

        form.classList.remove(showing_cn);

        gretting.classList.add(showing_cn);

        gretting.innerText = `${text} 님 반갑습니다`

    }

 

function loadName() {

    let currentUser = localStorage.getItem(USER_ID);

    if (currentUser === null) {

        askForName();

    } else {

        paintGretting(currentUser);

    }

}

 

function init() {

    loadName();

}

 

init();

 

function AskForm(){

    return(

        

         

         

          

         

          

           

  •            

  •          

             

            

        )

    }

     

    export default AskForm;

     

    현재 코드가 이런데 

     

    TypeError: Cannot read property 'querySelector' of null

     

    이 오류가 나는 이유가 뭘까요..? 

    댓글을 작성하려면 로그인이 필요합니다.

    답변 1개

    채택된 답변
    +20 포인트
    webdevok
    4년 전

    제가 보기에는

    document.querySelector(".js-form") 여기서 널값이 반환되어서

    변수 input에 null이 들어가는것 같네요

    input이 null인데 querySelector를 해서 나오는 에러입니다.

     

    null이 들어가는 이유는 폼이 렌더링 되기전이라서 querySelector를 해도 오브젝트를 찾을수 없기 때문입니다.

    렌더링 되고난후 실행되는 useEffect를 쓰셔야합니다.

    로그인 후 평가할 수 있습니다

    답변에 대한 댓글 1개

    루2
    4년 전
    감사합니다 저도 점심 먹으면서 계속 생각했었는데 같은 생각이였습니다

    댓글을 작성하려면 로그인이 필요합니다.

    답변을 작성하려면 로그인이 필요합니다.

    로그인