返回

打造你的短视频分享平台:利用Vite搭建React Hooks+Recoil+Antd的Web App

前端

前言 😄😄

继Vue3全家桶仿网易云Demo(详情上一篇文章),我又携带React全家桶仿Eyepetizer | 开眼视频的WebApp来啦~~

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”

目录

  • 简介
  • 搭建本地开发环境
  • 新建React项目
  • 安装Vite
  • 安装React Hooks、Recoil和Antd
  • 创建项目结构
  • 创建页面组件
  • 创建视频播放器组件
  • 创建视频列表组件
  • 创建视频上传组件
  • 创建视频分享组件
  • 部署到服务器

简介

本教程将指导您使用Vite、React Hooks、Recoil和Antd构建属于您自己的短视频Web App。我们将从介绍这些技术开始,然后逐步构建一个可以上传、观看和分享短视频的Web App。我们将涵盖从设置开发环境到部署成品网站的所有内容。

如果您有兴趣学习如何使用这些技术构建自己的Web App,那么这篇文章非常适合您。

搭建本地开发环境

首先,我们需要搭建本地开发环境。您可以使用您喜欢的编辑器和终端。我推荐使用Visual Studio Code和Git Bash。

安装Node.js和npm之后,就可以使用以下命令安装Vite:

npm install -g vite

新建React项目

现在,我们可以使用Vite创建一个新的React项目。打开终端,并导航到您想要创建项目的位置。然后,运行以下命令:

vite create my-app

这将创建一个名为“my-app”的新项目。

安装Vite

安装Vite之后,就可以在项目中使用它了。在项目的根目录下,创建一个名为“vite.config.js”的文件。然后,将以下代码复制到该文件中:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()]
})

这将告诉Vite使用React插件。

安装React Hooks、Recoil和Antd

接下来,我们需要安装React Hooks、Recoil和Antd。您可以使用以下命令安装这些库:

npm install react-hooks-testing-library recoil antd

创建项目结构

现在,我们可以开始创建项目结构了。在项目的根目录下,创建一个名为“src”的文件夹。然后,在“src”文件夹中,创建以下文件夹:

- components
- pages
- styles

创建页面组件

在“pages”文件夹中,创建一个名为“Home.jsx”的文件。然后,将以下代码复制到该文件中:

import React from 'react'

const Home = () => {
  return (
    <div>
      <h1>首页</h1>
    </div>
  )
}

export default Home

这将创建一个简单的首页组件。

创建视频播放器组件

在“components”文件夹中,创建一个名为“VideoPlayer.jsx”的文件。然后,将以下代码复制到该文件中:

import React, { useState, useEffect } from 'react'

const VideoPlayer = ({ video }) => {
  const [currentTime, setCurrentTime] = useState(0)
  const [duration, setDuration] = useState(0)
  const [playing, setPlaying] = useState(false)

  useEffect(() => {
    const videoElement = document.getElementById('video')

    videoElement.addEventListener('loadedmetadata', () => {
      setDuration(videoElement.duration)
    })

    videoElement.addEventListener('timeupdate', () => {
      setCurrentTime(videoElement.currentTime)
    })

    videoElement.addEventListener('ended', () => {
      setPlaying(false)
    })
  }, [])

  const handlePlayPause = () => {
    const videoElement = document.getElementById('video')

    if (playing) {
      videoElement.pause()
    } else {
      videoElement.play()
    }

    setPlaying(!playing)
  }

  const handleSeek = (e) => {
    const videoElement = document.getElementById('video')

    const percent = e.target.value / 100

    videoElement.currentTime = duration * percent
  }

  return (
    <div>
      <video id="video" src={video.url} controls={false} />
      <div className="controls">
        <button onClick={handlePlayPause}>{playing ? 'Pause' : 'Play'}</button>
        <input type="range" min="0" max="100" value={currentTime / duration * 100} onChange={handleSeek} />
      </div>