본문 바로가기
개인 공부/게시판

1. Diary Input, Block

by 갱생angel 2024. 1. 28.

일기장 작성 컴포넌트, 일기장 블럭 컴포넌트 구현

  -스프레드 연산자(...)로 state 객체 나열

  -저장 버튼을 누르면 작성한 일기장 객체 형태로 출력

 

component

  -Input.JSX

  -Button.JSX

  -Textarea.JSX

  -DiaryWrite.JSX

  -DiaryBlock.JSX

css

  -Diary.css

 

component - <Input.JSX>

import React from 'react'

function Input({className, type, name, value, onChange}) {
  return (
    <div>
      <input
        className={className}
        type={type}
        name={name}
        value={value}
        onChange={onChange}
        required
      />
    </div>
  )
}

export default Input

 

component - <Textarea.JSX>

import React from 'react'

function Textarea({className, name, value, onChange}) {
  return (
    <div>
      <textarea
        className={className}
        name={name}
        value={value}
        onChange={onChange}
        required
      />
    </div>
  )
}

export default Textarea

 

component - <Button.JSX>

import React from 'react'

function Button({type, className, name, onClick}) {
  return (
    <div>
      <button type={type} className={className} onClick={onClick}>
        {name}
      </button>
    </div>
  )
}

export default Button

 

component - <DiaryWrite.JSX> : 스프레드 연산자(...)로 입력값 객체 나열

import React, {useState} from 'react'
import '../css/Diary.css'
import Input from './Input'
import Textarea from './Textarea'
import Button from './Button'

function DiaryWrite() {
  const [diaryInput, setDiaryInput] = useState({ //입력 값 state
    title: '',
    content: ''
  })

  const changeInput = event => { //입력 값 지정
    setDiaryInput({
      ...diaryInput, //diaryInput 객체(title, content)를 나열
      [event.target.name]: event.target.value //객체 이름을 찾아 그 값을 지정
    })
  }

  const submitDiary = event => { //일기 저장
    event.preventDefault()
    setDiaryInput({
      title: '',
      content: ''
    })
    console.log(diaryInput) //작성한 일기를 콘솔 창에 출력
  }

  return (
    <div className="writeDiv">
      <h1 className="writeMain">Today Diary</h1>
      <form>
        <div>
          <label>제목</label>
          <Input
            className={'writeTitleInput'}
            type={'text'}
            name={'title'}
            value={diaryInput.title}
            onChange={changeInput}
          />
        </div>
        <div className="writeContentDiv">
          <label>내용</label>
          <Textarea
            className={'writeContentTextarea'}
            name={'content'}
            value={diaryInput.content}
            onChange={changeInput}
          />
        </div>
        <Button
          className={'submitButton'}
          type={'submit'}
          name={'저장'}
          onClick={submitDiary}
        />
      </form>
    </div>
  )
}

export default DiaryWrite

 

Diary.css

.writeDiv {
  border: 1px solid black;
  display: inline-block;
  padding: 20px;
}

.writeMain {
  text-align: center;
}

.writeTitleInput {
  width: 400px;
  height: 30px;
  font-size: 15px;
}

.writeContentDiv {
  margin-top: 20px;
}

.writeContentTextarea {
  width: 400px;
  height: 100px;
  resize: none;
  font-size: 15px;
}

.submitButton {
  margin-top: 20px;
  width: 400px;
  height: 40px;
  font-size: 20px;
}

 

App.js

import React from 'react'
import DiaryWrite from './component/DiaryWrite'

function App() {
  return (
    <div>
      <DiaryWrite />
    </div>
  )
}

export default App

DiaryWrite(일기 쓰기) 컴포넌트 구현

일기를 작성하고 저장 버튼을 누르면 객체 형태로 출력

 

component - <DiaryBlock.JSX>

import React from 'react'
import '../css/Diary.css'

function DiaryBlock() {
  return (
    <div className="blockDiv">
      <h4>제목</h4>
      <p>
        ---------------------------------------------------------------------------------------------
      </p>
      <h4>내용</h4>
    </div>
  )
}

export default DiaryBlock

 

Diary.css

.blockDiv {
  border: 1px solid rgb(211, 211, 211);
  background-color: rgb(211, 211, 211);
  width: 600px;
  padding: 10px;
}

 

App.js

import React from 'react'
import DiaryBlock from './component/DiaryBlock'

function App() {
  return (
    <div>
      <DiaryBlock />
    </div>
  )
}

export default App

 

 

DiaryBlock(일기 블록) 컴포넌트 구현

'개인 공부 > 게시판' 카테고리의 다른 글

6. 모달 창 구현  (0) 2024.02.10
5. 카테고리, 작성 날짜  (0) 2024.01.31
4. EditDiary  (0) 2024.01.29
3. DeleteDiary, diaryKey 값 유지  (0) 2024.01.29
2. AddDiary  (0) 2024.01.29