비디오 업로드 만들기 2
본문 바로가기
WEB

비디오 업로드 만들기 2

by KyeongMin 2021. 2. 25.
728x90
반응형

state를 만들건데 현재 VideoUploadPage를 보게 되면 onChage나 value 이런 것이 있는데

 

이를 state로 만들고 한번에 서버로 보낼 것이다. 

    const [VideoTitlesetTitle] = useState("")

 

이렇게 선언을 해주고 

 

 

    const [DescriptionsetDescription] = useState("")

선언하고 

 

    const [PrivatesetPrivate] = useState(0)

    const [CategorysetCategory] = useState("Film & Animation")

 

이렇게 두개 선언해주고 

 

option에 대해서

   <select onChange>

                <option>key value</option>    

  </select>

이렇게 있을때 

                <option>key value</option>   두번 선언해서 해도 되지만

 map을 이용해서 할 것입니다. 

 

그걸 하기에 앞서서

const PrivateOptions =[

    {value: 0label: "Private"},

    {value: 1label: "Public"}   

]

이렇게 선언해주고

이부분에서 

            <select onChange>

                {PrivateOptions.map((item,index)=>(

                    <option key={index} value={item.value}>{item.label}</option>

                ))}

 

                <option>key value</option>    

            </select>

 

이것이

            <select onChange>

                 <option>key value</option>    

                <option>key value</option>    

            </select>

같지만 전자를 써주는것이 좋다.

 

const CategoryOptions =[

    {value: 0label: "Film & Animation "},

    {value: 1label: "Autos & Vehicles"},

    {value: 2label: "Music"},

    {value: 3label: "Pet & Animals"}     

]

 

선언해주고

카테고리 부분의 옵션으로 가서 

 <select onChange>

                {CategoryOptions.map((item,index)=>(

                 <option key={index} value={item.value}>{item.label}</option>

                ))}

 

            </select>

 

 

이렇게 해주고 어떻게 화면이 구성되는지 봐봅시다.

import React, {useStatefrom 'react'

혹시나 useState가 안먹힌다면 위에 이렇게 선언이 되어 있는지 확인 해봅시다. 

우선 그렇게 되면 아래와 같이 나옵니다. 

 

 

이제는 onChange 부분을 구현할 것입니다. 

 

 

이부분을 구현 할 것 입니다. 

 

 

이렇게 해주시고,

 

    const onTitleChange = (e=>{

        setVideoTitle(e.currentTarget.value)

    }

    const onDescriptionChange = (e=>{

        setDescription(e.currentTarget.value)

    }

 

이렇게 선언하면 안에 내용을 쓸 수 있다. 

 

우선 1차적인 소스 입니다.

import React, {useState} from 'react'
import Dropzone from 'react-dropzone';
import {Typography, Button, Form, Message, Input, Icon} from 'antd';

const {TextArea} = Input;
const {Title} = Typography;

const PrivateOptions =[
    {value: 0, label: "Private"},
    {value: 1, label: "Public"}   
]
const CategoryOptions =[
    {value: 0, label: "Film & Animation "},
    {value: 1, label: "Autos & Vehicles"},
    {value: 2, label: "Music"},
    {value: 3, label: "Pet & Animals"}     
]

function VideoUploadPage() {

    const [VideoTitle, setVideoTitle] = useState("")
    const [Description, setDescription] = useState("")
    const [Private, setPrivate] = useState(0)
    const [Category, setCategory] = useState("Film & Animation")

    const onTitleChange = (e) =>{
        setVideoTitle(e.currentTarget.value)
    }
    const onDescriptionChange = (e) =>{
        setDescription(e.currentTarget.value)
    }
    return (
        <div style={{maxWidth:'700px',margin:'2rem auto'}}>
            <div style={{textAlign:'center',marginBottom:'2rem'}}>
                <Title level={2}>Upload Video</Title>
            </div>
            <Form onSubmit>
                <div style={{display:'flex',justifyContent:'space-between'}}>
                 {/*Drop zone*/}
                    <Dropzone
                    onDrop
                    multiple
                    maxSize
                    >
                    {({getRootProps, getInputProps})=>(
                            <div style={{width:'300px', height:'240px', border:'1px solid lightgray',display :'flex',
                            alignItems:'center',justifyContent:'center'}}{...getRootProps()}>
                                <input{...getInputProps()}/>
                                <Icon type="plus" style={{fontSize:'3rem'}}/>
                            </div>
                    )}

                    </Dropzone>
                 {/*Thumbnail*/}
                 <div>
                     <img src alt/>
                 </div>
                </div>
            <br/>
            <br/>
            <label>Title</label>
            <Input
                onChange = {onTitleChange}
                value = {VideoTitle}
            />
            <br/>
            <br/>
            <label>Description</label>
            <TextArea
                onChange = {onDescriptionChange}
                value ={Description}
            />
            <br/>
            <br/>
            <select onChange>
                {PrivateOptions.map((item,index)=>(
                    <option key={index} value={item.value}>{item.label}</option>
                ))}
            </select>
            <br/>
            <br/>
            <select onChange>
                {CategoryOptions.map((item,index)=>(
                 <option key={index} value={item.value}>{item.label}</option>
                ))}

            </select>
            <br/>
            <br/>
            <Button type="primary" size="large" onClick>
                Submit
            </Button>

            </Form>
        </div>
    )
}

export default VideoUploadPage

 

 

그리고 

두개의 onChage에 대해서도 선언을 하겠습니다. 

이렇게 해줍니다. 

 const onPrivateChange = (e=>{

        setPrivate(e.currentTarget.value)

    }

    const onCategoryChange = (e=>{

        setCategory(e.currentTarget.value)

    }

 

 

이렇게 선언해주면 됩니다. 

 

우선 여기까지 하고 다음에는 드롭존에 넣었을때 이벤트가 발생하는 부분을 구현합니다. 

 

728x90
반응형

'WEB' 카테고리의 다른 글

ffmpeg를 이용하여 비디오 썸네일 만들기  (0) 2021.03.01
Multer 이용 서버에 비디오 저장  (6) 2021.02.28
비디오 업로드 만들기 1  (0) 2021.02.20
WEB 만들기 32 인증체크  (0) 2021.01.26
WEB 만들기 -31 로그아웃  (0) 2021.01.25

댓글