안녕하세요.. 리덕스 연습하는 중에 막혀서 질문드립니다..
216
작성한 질문수 5
안녕하세요. 리덕스를 공부하고 혼자 연습하는데 잘 모르겠어서 질문 드립니다..
리덕스가 개념은 이해가 가도 실제 사용하는게 어려워서 다른 여러 강의나 글들을 보면서 연습해보고 있습니다.
예제출처 해당 강의가 옛날꺼라 클래스형 컴포넌트를 쓰기 때문에 예제만 따오고 함수형 컴포넌트를 사용해서 해보고 있습니다.
코드
스토어에는 number와 size 두개의 state가 있습니다.
AddNumber의 input에 값을 입력하면 그 값이 스토어의 size에 업데이트 됩니다.
+와 - 버튼을 누르면 그 input에 입력한 값만큼 number에 더해지고, displaynumber에 보여져야 합니다.
+와 -버튼을 눌렀을 때 number값이 새로 업데이트 되도록 만들고 싶은데, increase와 decrease 액션을 생각대로 만들기가 쉽지 않습니다. 현재 input값이 바뀔 때 스토어의 size가 바뀌는것까지 성공한 상황입니다.
handleActions으로 리듀서함수를 만들었는데, 이부분이 의심스럽습니다.
const Add = handleActions(
{
[INCREASE]: (state, action) => ({
...state,
number: state.number + state.size,
}),
[DECREASE]: (state, action) => ({
...state,
number: state.number - state.size,
}),
[CHANGE_INPUT]: (state, action) => ({
...state,
size: action.payload,
}),
},
initialState
);
CHANGE_INPUT 액션은 말을 잘듣는데, INCREASE와 DECREASE는 잘 모르겠습니다 !!ㅜㅜ
increase나 decrease가 왜 addnumber 컴포넌트로 안가져와지는지,
함수가 state의 size를 가져와서 쓸수있도록 하고싶은데
어떻게 코드를 짜야 생각한대로 움직일지,,
추석에 질문 보내서 죄송합니다. 천천히 답변해주시면 정말 감사하겠습니다. 해피추석되시길 바라요. 감사합니다~
답변 1
0
컴포넌트도 같이 올려주셔야겠죠? increase, decrease할 때는 action은 쓸 필요가 없나요?
0
addnumber.js
import React from "react";
const AddNumber = ({ size, increase, decrease, onChangeInput }) => {
const onChange = (e) => onChangeInput(e.target.value);
return (
<div>
<h1>AddNumber</h1>
<input type="button" value="+" onClick={increase}></input>
<input type="button" value="-" onClick={decrease}></input>
<input type="text" value={size} onChange={onChange} />
</div>
);
};
export default AddNumber;
addContainer.js
import React from "react";
import { connect } from "react-redux";
import AddNumber from "../components/AddNumber";
import { increase, decrease, changeInput } from "../modules/Add";
const AddContainer = ({ size, changeInput, increase, decrease }) => {
return (
<AddNumber
size={size}
onChangeInput={changeInput}
onIncrease={increase}
onDecrease={decrease}
/>
);
};
export default connect(
(state) => ({
size: state.Add.size,
number: state.Add.number,
}),
{
increase,
decrease,
changeInput,
}
)(AddContainer);
위 컴포넌트에서 리듀서와 연동을 해서 addnumber 컴포넌트에 넘겨줍니다.
action은 쓸 필요가 없나요? 라는 말씀이 잘 이해가 안갑니다ㅜㅜ 이 부분을 말씀하시는건가요
[INCREASE]: (state, action) => ({
...state,
number: state.number + state.size,
}),
[DECREASE]: (state, action) => ({
...state,
number: state.number - state.size,
}),
액션생성함수에 파라미터로 넣을 값을 action.payload 라는 이름으로 넣는다고 알고 있는데,
컴포넌트에서 파라미터로 넣는게 아니라 스토어에 있는 size를 쓰도록 하고싶어서 바로 state.size를 더해서 반환하도록 했습니다.
modules/Add.js 추가합니다
import { createAction, handleActions } from "redux-actions";
const INCREASE = "INCREASE";
const DECREASE = "DECREASE";
const CHANGE_INPUT = "CHANGE_INPUT";
export const increase = createAction(INCREASE);
export const decrease = createAction(DECREASE);
export const changeInput = createAction(CHANGE_INPUT, (input) => input);
const initialState = {
number: 0,
size: 1,
};
const Add = handleActions(
{
[INCREASE]: (state, action) => ({
...state,
number: state.number + state.size,
}),
[DECREASE]: (state, action) => ({
...state,
number: state.number - state.size,
}),
[CHANGE_INPUT]: (state, action) => ({
...state,
size: action.payload,
}),
},
initialState
);
export default Add;
0
redux-devtools 쓰시나요? 그걸로 분석해보세요. 코드에는 문제가 없어 보입니다(제가 handleActions같은 스타일을 써본적이 없어 정확히는 모르겠습니다).
넥스트 버젼 질문
0
90
2
로그인시 401 Unauthorized 오류가 뜹니다
0
104
1
무한 스크롤 중 스크롤 튐 현상
0
192
1
특정 페이지 접근을 막고 싶을 때
0
116
2
createGlobalStyle의 위치와 영향범위
0
102
2
인라인 스타일 리렌더링 관련
0
97
2
vsc 에서 npm init 설치시 오류
0
157
2
nextjs 15버전 사용 가능할까요?
0
166
1
화면 새로고침 문의
0
129
1
RTK에서 draft, state 차이가 있나요?
0
160
2
Next 14 사용해도 될까요?
0
455
1
next, node 버전 / 폴더 구조 질문 드립니다.
0
359
1
url 오류 질문있습니다
0
214
1
ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out
0
391
1
sudo certbot --nginx 에러
0
1293
2
Minified React error 콘솔에러 (hydrate)
0
477
1
카카오 공유했을 때 이전에 작성했던 글이 나오는 버그
0
255
1
프론트서버 배포 후 EADDRINUSE에러 발생
0
337
1
npm run build 에러
0
525
1
front 서버 npm run build 중에 발생한 에러들
0
399
1
서버 실행하고 브라우저로 들어갔을때 404에러
0
350
2
css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.
0
290
1
팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.
0
249
2
해시태그 검색에서 throttle에 관해 질문있습니다.
0
206
1






