인프런 커뮤니티 질문&답변

just kim님의 프로필 이미지
just kim

작성한 질문수

코드로 배우는 React with 스프링부트 API서버

로그인 페이지 설정

input box에 데이터 입력후 확인 버튼 누르고 input 데이터 수정하면 오류 발생 ...

작성

·

54

1

안녕하세요 Redux 수업 다 듣고 이해 되지 않아서 따로 프로젝트를 뽑아서 Redux를 연습 하고 있어요...

일단 이해는 다된거 같아요...

아래 dispatch 하는 부분에서 오류가 뜨네요..

먼저 처리 순서가 ... input에 데이터를 입력하고 로그인 버튼을 클릭하고 다시 input에 데이터를 입력하면 오류가 뜨네요

cannot assign to read only property 'current' of object '# object '

버튼 클릭하는 부분에 dispatch하는 내용을 넣었구요..

구글에는 깊은 복사 뭐 이런거 있던데 그거랑 관련 없는거 같구...

 

===================================

리듀스 기본을 알면 저 문제 해결될꺼라는 어떤분의 답변이 야속하네요 ...

 

코드 시작

=============================

import { useState } from "react";
import { useDispatch } from "react-redux";
import {login} from "../slices/loginSlice"

const initState = {
    email:'',
    password:''
}

function LoginComponent(props) {

    const [loginParam, setLoginParam] = useState({...initState})

    const disPatch = useDispatch()

    const handleChange = (e)=> {
        loginParam[e.target.name] = e.target.value
        setLoginParam({...loginParam})
    }

    const handleLoginClick = (e)=>{
        console.log(".......")
        disPatch (
            login(loginParam)
        )
    }

    const handleLogoutClick = (e)=>{
        disPatch(
            login(initState)
        )
    }

    return (
        <div>
            <div className="flex flex=nowrap gap-x-8 place-content-center ">
                <div>
                    <div> login </div>
                    <div>
                        <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md" 
                        name="email" type ={'text'} value={loginParam.email} onChange ={handleChange}>
                        </input>
                    </div>
                    <div>
                        <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md"
                        name="password" type={'password'} value={loginParam.password} onChange={handleChange}
                        >
                        </input>
                    </div>
                    <div>
                        <button className = "rounded p-4 w-36 bg-blue-500 text-xl text-white"
                         onClick={handleLoginClick}
                        >
                            Login..
                        </button>
                    </div>
                </div>
                <button onClick={handleLogoutClick}>
                    logout
                </button>
            </div>
        </div>
    )
}

export default LoginComponent;

 

 

=============================

답변 1

1

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

현재 질문에 올려두신 코드의 내용 자체의 문제는 아닌듯 합니다.

 

loginSlice에서 구현된 코드에서 기존의 상태를 수정하는 부분이 있으면 'cannot assign.. ' 메시지가 뜨게 됩니다.

 

just kim님의 프로필 이미지
just kim
질문자

일단 다시 연구 해서 찾긴 했는데 또다른 연구가 필요하겠네요..

    const handleChange = (e)=> {
        loginParam[e.target.name] = e.target.value
        console.log(loginParam)
        setLoginParam({...loginParam})
    }

    // const handleLoginClick = (e)=>{
    //     console.log(".......")
    //     disPatch (
    //         login({loginParam})
    //     )
    // }

    const handleLoginClick = (e)=>{
        console.log(".......")
        disPatch (
            login({...loginParam})
        )
    }

login({... <== 이거 ...을 붙이니깐 문제가 없어 지네요..

... 연산을 제가 모르고 강의 공부를 진행했던게 이렇게 터졌네요...

그냥 ...은 배열을 통채로 복사 하는 정도로만 알았네요..

... 연산은 구글에도 잘 안보이구 .

문법에 import {000} from 이랑 import 000 from이랑도 문법이 다르고 ...( {} 안해서 오류가 나 꽤나 고생했음) 기분 상함 ..

 

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

네 은근히 헷갈리는 문법들이 많습니다

just kim님의 프로필 이미지
just kim

작성한 질문수

질문하기