inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기

구독 기능 (2)

VideoDetailPage에서 Subscribe관련 질문

해결된 질문

195

김찬호

작성한 질문수 2

0

VideoDetailPage가 render되고 Subscribe 컴포넌트에서 useEffect 사용으로 state변화로 rerender되서 Subscribe버튼이 Subscribe -> Subscribed 로 보여지는게 싫어서 처음부터 Subscribed로 랜더할수있게 하는 방법이 있을까요?

redux mongodb react nodejs

답변 2

1

John Ahn

아마  이게 proxy를 쓰다보니깐 통신이 느려서   그  Subscribe가 Subscribed로 될때 보여지는게 더 클거에요 

제가 proxy를 쓰지 않고 했으면 더 이런 이슈가 덜있었을것 같다고 생각합니다 ~ 

그리고 이런것을 더 없애시고 싶다면   서버사이드렌더링을 하시면 됩니다 ~ 

그래도 이상황에서도 어느정도 구현을 해보면  

아래 처럼 구현할수 있습니다 ~ 

import React, { useEffect, useState } from 'react'
import axios from 'axios';
function Subscriber(props) {
const userTo = props.userTo
const userFrom = props.userFrom

const [SubscribeNumber, setSubscribeNumber] = useState(0)
const [Subscribed, setSubscribed] = useState(false)
const [Loading, setLoading] = useState(true)

const onSubscribe = () => {

let subscribeVariables = {
userTo: userTo,
userFrom: userFrom
}

if (Subscribed) {
// 이미 구독 중 일때
axios.post('/api/subscribe/unSubscribe', subscribeVariables)
.then(response => {
if (response.data.success) {
setSubscribeNumber(SubscribeNumber - 1)
setSubscribed(!Subscribed)
} else {
alert('Failed to unsubscribe')
}
})

} else {
// 구독 중이 아닐 때
axios.post('/api/subscribe/subscribe', subscribeVariables)
.then(response => {
if (response.data.success) {
setSubscribeNumber(SubscribeNumber + 1)
setSubscribed(!Subscribed)
} else {
alert('Failed to subscribe')
}
})
}

}


useEffect(() => {

const subscribeNumberVariables = { userTo: userTo, userFrom: userFrom }
axios.post('/api/subscribe/subscribeNumber', subscribeNumberVariables)
.then(response => {
if (response.data.success) {
setSubscribeNumber(response.data.subscribeNumber)
setLoading(false)
console.log("ddd", response)

} else {
alert('Failed to get subscriber Number')
}
})

axios.post('/api/subscribe/subscribed', subscribeNumberVariables)
.then(response => {
if (response.data.success) {
console.log('haha')
setSubscribed(response.data.subcribed)

} else {
alert('Failed to get Subscribed Information')
}
})


}, [])

if (Loading) {
return (
<div></div>
)
} else {
return (
<div>
<button
onClick={onSubscribe}
style={{
backgroundColor: `${Subscribed ? '#AAAAAA' : '#CC0000'}`,
borderRadius: '4px', color: 'white',
padding: '10px 16px', fontWeight: '500', fontSize: '1rem', textTransform: 'uppercase'
}}>
{SubscribeNumber} {Subscribed ? 'Subscribed' : 'Subscribe'}
</button>
</div>
)
}

}

export default Subscriber

0

김찬호

proxy는 생각못했는데 하나 더 배웁니다 감사합니다 그리고 서버사이드렌더링 공부도 해야겠습니다. : >

npm i하면 바로, 라이브러리 오류없이 받아지고, 구동되는 소스는 없나요?

0

52

1

ERROR in ./node_modules/antd/es/version/index.js 2:15-22

0

221

1

자료 없음

0

322

1

이미지 깨짐

0

336

1

npm run dev 동작 에러

0

304

1

npm run dev 동작 에러

0

295

1

npm run dev 동작에러납니다...

0

661

1

npm run dev 실행 오류

0

653

1

비디오 업로드, 로그인, 회원가입 504 error

0

1057

1

시작부터 오류생기시는 분들 해결법입니다.

1

467

1

오류 해결 공유

0

459

1

npm install 에러 질문드립니다.

0

1121

2

아예 몽고DB에 연결한다고만 하고 연결이 안되고 있습니다.

0

550

1

해당 오류 해결 방법 좀 알려주세요 ㅠㅠ

0

516

1

로컬스토리지에 대한 질문입니다!!

0

515

0

video가 안 나타나는 문제

0

894

1

ffmpeg 설치 후 cannot read property 'format' of undefined 500 에러 해결

0

471

0

typeError or 콘솔 500 뜨는분..

0

336

0

npm run dev 관련 오류

0

578

1

답글이 달리지않고 디비에도 저장되지않으며 새로고침이 됩니다.

0

246

0

useState 자동 생성

0

347

1

TypeError: Cannot read properties of undefined (reading 'format')

0

1246

2

userData undefined / state에 user.userData가 없습니다.

0

248

0

antd Input background color 변경

0

242

0