inflearn logo
강의

講義

知識共有

今すぐReactを始めよう

Reduxとは?

코드 한번만 봐주실수 있나요 ?

231

clcl60840997

投稿した質問数 4

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Anton&family=Edu+VIC+WA+NT+Beginner&family=Indie+Flower&family=Permanent+Marker&family=Shadows+Into+Light&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.1/redux.js"></script>
</head>
<body>
<style>
#Container{
border: 3px solid black;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
margin-top: 10px;
}
#Container div {
box-sizing: border-box;
border: 5px solid orange;
height:200px;
width:32%;
margin:5px;
padding: 20px;
font-size: 30px;
}
</style>
<div id="actionBox">
<input type="text" placeholder="Type anything">
<button onclick="clickMe()">Click Me!</button>
<button onclick="changeRadius(10)">Rounded</button>
<button onclick="changeRadius(15)">Circle!</button>
<button onclick="changeRadius(0)">Rectangle!</button>
<button onclick="changeColor('red')">Red!</button>
<button onclick="changeColor('green')">Green!</button>
<button onclick="changeColor('blue')">Blue!</button>
</div>
<div id="Container">
<div class="textBox" id="1"></div>
<div class="textBox" style="font-family:'Anton'" id="2"></div>
<div class="textBox" style="font-family:'Edu VIC WA NT Beginner'" id="3"></div>
<div class="textBox" style="font-family:'Indie Flower'" id="4"></div>
<div class="textBox" style="font-family:'Permanent Marker'" id="5"></div>
<div class="textBox" style="font-family:'Shadows Into Light'" id="6"></div>
</div>
<script>
let divs = document.querySelectorAll('.textBox')

function reducer(state, action) {
console.log(state, action);
if (state === undefined) {
return { color: 'orange' }
}
var newState;
if (action.type === 'CHANGE_COLOR') {
return{
...state,
color: action.color
}
}
else if (action.type === 'CHANGE_TEXT'){
return{
...state,
text: action.text
}
}
else if (action.type === 'CHANGE_RADIUS'){
return{
...state,
radius: action.radius
}
}
}

var store = Redux.createStore(
reducer,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);


function clickMe(){
let text = document.querySelector('input')

store.dispatch({type:'CHANGE_TEXT', text:`${text.value}`})
var state = store.getState();

divs.forEach((e) => {
e.innerText = `${state.text}`
})

text.value = "";
}

function changeColor(e){
store.dispatch({type:'CHANGE_COLOR', color:e})
var state = store.getState();

divs.forEach((e) => {
e.style.border = ` 5px solid ${state.color}`
})
}


function changeRadius(r){
store.dispatch({type:'CHANGE_RADIUS', radius:r})
var state = store.getState();

divs.forEach((e) => {
e.style.borderRadius = `${state.radius}px`
})
}
 

</script>
</body>
</html>
 
 
이런식으로 onclick 시 함수 호출하면서 값을 전달해주고, 함수내에서 dispatch를 실행하고 foreach로 속성바꿔주는 식으로 했는데, 꼭 onclick할때 dispatch를 해줘야하는건가요 ? 이런식으로 하니까, subscribe는 필요없는거같아서요. 아마 일괄적으로 바꿔주는 방식이라서 제가 이렇게 가능했던거 같은데, 개별적으로 값을 바꿔주는 과제였다면 좀 달라졌을까요?

react redux

回答 1

0

Hojun Lee

지금 주신 코드를 살펴보았는데요.

 

1. '작동하는가?'에 대해 초점이 맞춰져 있으시다면 지금 주신 코드처럼 바닐라로 짜셔도 됩니다.  :)

div에 forEach를 돌리는 방식은 바닐라 방식이죠.

꼭 이게 옳으니 이렇게 짜라라기 보다는 프로젝트 규모에 따라 부하가 발생되지 않는 방식을 선택하시면 됩니다.

 

2. 다만 리덕스를 사용하는 이유는 '작동하는가'가 아닌 '복잡성을 해소할 수 있는가'입니다.

이 프로젝트에서는 그만큼에 복잡도가 없으니 말씀 주신 것처럼 짜셔도 동작도 하고 복잡도도 올라가지 않습니다.

다만 수천개의 컴포넌트가 있고, 상태관리도 수백개를 해야 한다면 고려하셔야 할 기술입니다.

 

배우는 과정에 있는 코드라 '이렇게 복잡성을 해소할 수 있다'의 초점으로 접근해주시면 좋을 것 같습니다.

감사합니다.

plans 생성이 안됩니다.

0

7

2

더빙에 어떤 ai가 쓰였는지 궁금합니다.

0

9

0

보안 적용에 대한 강의가 있을까요?

0

4

1

Auto-memory 기능

0

12

1

64강 context 7 관련 질문

0

13

1

Auto-memory 기능

0

13

0

55강 7분56초

0

10

0

55강 git 초기화 관련 질문이요

0

11

1

클로드 코드에 붙여넣기후 편집 관련 질문입니다!

0

15

1

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

18

1

윈 터미널의 클로드와 에디터의 터미널의 클로드에 관한 질문

0

13

1

output-styles 명령어 없어 지지 않았나요?

0

17

1

[MISSION 7] 프로필 웹 Github 링크 제출하기 관련..

0

25

0

커서 클로드 코드 검색창 검색 시

0

17

1

/init 초기화 이유

0

27

1

Git commit 관련 질문

0

22

1

Powershell은 시스템관리자가 앱을 차단

1

24

1

지금 바로 React 시작하기 heart 연습문제

0

455

1

React에서 이벤트 처리하기(추가퀴즈)

0

362

1

Route 퀴즈를 풀어봤는데 한번 봐주실 수 있나요?!

0

387

1

구조 분해 전 후

0

267

0

3분 44초

0

224

0

비동기 통신에 있어서 질문남깁니다.(코드첨부)

0

465

2

정답안에 압축파일안에 컴포넌트 이름이 잘못 된 것 같습니다.

0

211

1