useSelector가 초기값만 읽고, 상태변화를 읽지못함
473
작성한 질문수 5
안녕하세요. 선생님
늦은 시간인데도 답변해주셔서 감사합니다(꾸벅)
선생님께서 말씀해주신대로 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;
답변 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





