useLike.js 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { useEffect, useState } from 'react'
  2. import Taro from '@tarojs/taro'
  3. import { fetch } from '@/utils/request'
  4. import { resolvePath } from '@/constants/api'
  5. import track from '@/utils/tracking/track'
  6. const addLike = (type, id) => fetch({ url: resolvePath(`${type}/like/${id}`), method: 'POST' })
  7. const cancelLike = (type, id) => fetch({ url: resolvePath(`${type}/like/${id}`), method: 'POST' })
  8. export default function(saved, options = {}) {
  9. const { id, eventType } = options
  10. const [isLiked, setIsLiked] = useState(saved)
  11. useEffect(() => setIsLiked(saved), [saved])
  12. const handleLike = () => {
  13. if (isLiked) {
  14. cancelLike(eventType, id).then(() => {
  15. setIsLiked(false)
  16. Taro.showToast({
  17. title: '已取消点赞',
  18. icon: 'none',
  19. })
  20. })
  21. } else {
  22. addLike(eventType, id).then(() => {
  23. setIsLiked(true)
  24. Taro.showToast({
  25. title: '点赞成功',
  26. icon: 'none',
  27. })
  28. })
  29. }
  30. track({
  31. event: 'save',
  32. ...options,
  33. })
  34. }
  35. return [isLiked, handleLike];
  36. }