[react&NodeJS]映画ページ#4
日付:21.007.08
参考講義
1)axiosを[Ssection]-[Favorite.js]に追加
Axios、Favoriteボタンをクリックするかどうか
SetFavoriteNumber:Favoriteの数字を共に押す
setFavorite:Favoriteをクリック
Favoritedがfalseの場合、「Not Favorite{number}」とマークされます.
Favorite trueの場合は、「Add to Favorite{number}」とマークされます.結果画面
1)onClickイベントを[Section]-[Favorite.js]ボタンに追加
let変数をuseEffectの外にエクスポート
参考講義
1.Favoriteボタンの最適化
1)axiosを[Ssection]-[Favorite.js]に追加
Axios、Favoriteボタンをクリックするかどうか
axios.post('/api/favorite/favorited', variables)
.then(response => {
if (response.data.success) {
} else {
alert('정보를 가져오는데 실패하였습니다.');
}
})
2)ルートを[route]-[favorite.js]に追加router.post('/favorited', (req, res) => {
// Favorite 리스트에 추가하였는지 DB에서 정보 확인
// mongoDB에서 favorite 숫자 가져오기
Favorite.find({ "movieId": req.body.movieId, "userFrom": req.body.userFrom })
.exec((err, info) => {
if (err) return res.status(400).send(err)
let result = false;
if (info.length !== 0) {
result = true
}
// front에 숫자 정보 전송
res.status(200).json({ success: true, favoriteNumber: info.length })
})
});
3)ユーザ状態の追加[Section]-[Favorite.js]SetFavoriteNumber:Favoriteの数字を共に押す
setFavorite:Favoriteをクリック
function Favorite(props){
...
...
const [FavoriteNumber, setFavoriteNumber] = useState(0);
const [Favorited, setFavorited] = useState(false);
useEffect(() => {
let variables = {
userFrom,
movieId,
}
axios.post('/api/favorite/favoriteNumber', variables)
.then(response => {
setFavoriteNumber(response.data.favoriteNumber)
if (response.data.success) {
} else {
alert('숫자 정보를 가져오는데 실패하였습니다.');
}
})
axios.post('/api/favorite/favorited', variables)
.then(response => {
if (response.data.success) {
setFavorited(response.data.favorited)
} else {
alert('정보를 가져오는데 실패하였습니다.');
}
})
}, []);
}
4)returnにおけるbuttonの具体化Favoritedがfalseの場合、「Not Favorite{number}」とマークされます.
Favorite trueの場合は、「Add to Favorite{number}」とマークされます.
function Favorite(props) {
...
...
return (
<div>
<button>{Favorited ? "Not Favorite" : "Add To Favorite "}{FavoriteNumber}</button>
</div>
)
}
2.お気に入りリストに追加
1)onClickイベントを[Section]-[Favorite.js]ボタンに追加
let変数をuseEffectの外にエクスポート
function Favorite(props) {
let variables = {
userFrom: userFrom,
movieId: movieId,
movieTitle: movieTitle,
moviePost: moviePost,
movieRunTime: movieRunTime
}
...
...
const onClickFavorite = () => {
if (Favorited) {
axios.post('/api/favorite/removeFromFavorite', variables)
.then(response => {
if (response.data.success) {
} else {
alert('Favorite 리스트에서 지우는 걸 실패했습니다.')
}
})
} else {
axios.post('/api/favorite/addToFavorite', variables)
.then(response => {
if (response.data.success) {
} else {
alert('Favorite 리스트에서 추가하는 걸 실패했습니다.')
}
})
}
}
return(
<Button onClick={onClickFavorite}>{Favorited ? "Not Favorite " : "Add To Favorite "}{FavoriteNumber}</Button>
)
}
2)ルートを[route]-[favorite.js]に追加router.post('/removeFromFavorite', (req, res) => {
Favorite.findOneAndDelete({ movieId: req.body.movieId, userFrom: req.body.userFrom })
.exec((err, doc) => {
if (err) return res.status(400).send(err)
res.status(200).json({ success: true, doc })
})
})
router.post('/addToFavorite', (req, res) => {
const favorite = new Favorite(req.body)
favorite.save((err, doc) => {
if (err) return res.status(400).send(err)
return res.status(200).json({ success: true })
})
})
3)[Ssection]-[Favorite.js]onClickイベント効果を挿入するconst onClickFavorite = () => {
if (Favorited) {
axios.post('/api/favorite/removeFromFavorite', variables)
.then(response => {
if (response.data.success) {
// remove시 숫자 -1
setFavoriteNumber(FavoriteNumber - 1)
setFavorited(!Favorited)
} else {
alert('Favorite 리스트에서 지우는 걸 실패했습니다.')
}
})
} else {
axios.post('/api/favorite/addToFavorite', variables)
.then(response => {
if (response.data.success) {
// add시 숫자 +1
setFavoriteNumber(FavoriteNumber + 1)
setFavorited(!Favorited)
} else {
alert('Favorite 리스트에서 추가하는 걸 실패했습니다.')
}
})
}
}
Full Code
Walang Github
Walang Notion
Reference
この問題について([react&NodeJS]映画ページ#4), 我々は、より多くの情報をここで見つけました https://velog.io/@ganzi410/React-NodeJS영화웹페이지4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol