inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[실시간 채팅 with React]

useSelector가 초기값만 읽고, 상태변화를 읽지못함

473

정지은

작성한 질문수 5

0

안녕하세요. 선생님
늦은 시간인데도 답변해주셔서 감사합니다(꾸벅)

선생님께서 말씀해주신대로 useSelector를 써봤는데요.
useSelector가 초기값만 읽고, updateReducer에 의해 상태가 업데이트되면,
업데이트 된 값을 읽지 못합니다....

1. console.log(title)이라고 썼는데, 아무것도 뜨지 않습니다
2. Modal 컴포넌트에 제목을 입력을 해도 상태 변화를 읽지를 못합니다.
어디서 잘못 된걸까요??

const TodoItem = () =>{


   const [state, dispatch] = useReducer(checkReducer, todoItem)
   const id = useSelector((state)=> state.update.id);
   const title = useSelector((state)=> state.update.title)
   const content = useSelector((state)=> state.update.content);
   const isDone = useSelector((state)=> state.update.isDone)
   
   const handleCheck = (id) =>{
      dispatch(checkBox(id));
    };
   
    console.log(title)
   
return(
   <SeveralItemContainer>
      <TodoItemContainer key={id}>
      <TitleContainer>
      <img className ="dot" src={dot} alt="icon"></img>
      <div className="title">{title}</div>
      <img onClick={ () => {handleCheck(id)}} className="noncheck" src = {isDone ? check: noncheck} alt="icon"></img>
      </TitleContainer>
      <div className="contentcontainer">
      <div className="content">{content}</div>
      </div>
      </TodoItemContainer>
    </SeveralItemContainer>
)
};

export default TodoItem;


   
   
export const updateReducer = (state=initialState, action)=>{
  
 switch(action.type){
  case 'UPDATE_TITLE': 
    return{...state, title: action.payload};
  case 'UPDATE_STARTDATE':
    return{...state, startDate: action.payload};
  case 'UPDATE_ENDDATE':
    return{...state, endDate:action.payload};
  case 'UPDATE_CONTENT':
    return {...state, content: action.payload};
  case 'ADD_ITEM':
    return  {...state, id: Number(state.id)+1}
    //여기서 todoItem을 바로 쓸 수 없다. state나 action관련된 변수만 넣어야 한다
   // 배열은 가능하지만, 객체는 전개연산자(...)를 쓸 수 없다
    default:
    return state;
 }
};

 const rootReducer = combineReducers({
    update: updateReducer,
    check: checkReducer,
});

export default rootReducer;

 

const Modal = ({onClick}) =>{

  const [state, dispatch] = useReducer(updateReducer, initialState)

  const handleModalClick = (e) => {
    e.stopPropagation(); // 이벤트 버블링 막기
  };

  //사용자가 입력한 값을 추적하는 함수
  const handleInputChange = (e) =>{
   const {name, value} = e.target;
   dispatch({type: `UPDATE_${name.toUpperCase()}`, payload: value})
  };

  //클릭으로 적은 모든 내용을 한번에 전달
  const addItem = () =>{
  dispatch({type:'ADD_ITEM'});
  };

return(
    <ModalBackGround onClick={onClick}>
    <ModalView onClick={handleModalClick} >
    <div className = "titleContainer">
    <img className="dot" src = {dot} alt="icon"></img> 
    <input value ={state.title} name = "title" className="title" placeholder="메모 제목" onChange={handleInputChange}></input>
    <img onClick={addItem} className="edit" src={edit} alt="icon"></img>
    </div>
    <div className="date">
    <div className='일자'>일자</div>
    <input value ={state.startDate} name ="startDate" className ="start" placeholder="시작일" onChange={handleInputChange}></input>
    <div>~</div>
    <input value ={state.endDate} name= "endDate" className ="end" placeholder="종료일" onChange={handleInputChange}></input>
    </div>
    <div className='contentContainer'>
    <textarea value ={state.content} name ="content" className ="content" placeholder="메모" onChange={handleInputChange}>
    </textarea>
    </div>
    </ModalView>
    </ModalBackGround>
)
};

export default Modal;

react 웹팩 typescript socket.io babel 클론코딩

답변 1

1

제로초(조현영)

dispatch를.... useReducer의 dispatch를 쓰셨는데요...???

useReducer는 리덕스가 아니라 리액트 것입니다... ㅎㅎ

useDispatch

기본 셋팅과 관련하여

0

92

1

초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법

0

96

2

focus 시에만 화면 업데이트 되는 이유 + 해결방법

0

150

2

useEffect 개수 관리

0

110

2

라이브러리 서치 방법

0

104

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)

0

144

2

사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')

1

178

2

초기세팅중 packge.json 에러떠요

0

156

2

CORS - Access-Control-Allow-Origin 누락 문제

0

431

3

로그인 페이지 무한 새로고침 현상

0

598

2

Module not found: Error: Can't resolve './App' 에러

0

959

1

배포 방법

0

298

2

npm run dev 시 빌드가 매우 느려졌습니다

0

990

2

alias 경로 설정 오류

0

452

2

fetcher 함수의 data 값이 두번 찍히는 이유

0

277

1

제네릭 질문

0

218

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.

0

385

2

[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.

0

336

1

users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.

0

247

2