이다닷

[React] Day 7 - Create 구현 1 본문

React

[React] Day 7 - Create 구현 1

이다닷 2023. 8. 31. 18:00

mode 변경 기능

App.js 추가내용

import Control from "./components/Control";

<Control onChangeMode={function (_mode) {
    this.setState({
    mode: _mode
});}.bind(this)}>
</Control>

추가된 components 하위 파일 Control.js

import React, { Component } from 'react';

class Control extends Component {
  render() {
    return (
      <ul>
        <li><a
          href="/create"
          onClick={function (e) {
            e.preventDefault();
            this.props.onChangeMode('create');
          }.bind(this)}>create</a></li>
        <li><a
          href="/update"
          onClick={function (e) {
            e.preventDefault();
            this.props.onChangeMode('update');
          }.bind(this)}>update</a></li>
        <li><input onClick={function (e) {
          e.preventDefault();
          this.props.onChangeMode('delete');
        }.bind(this)} type="button" value="delete"></input></li>
      </ul>
    );
  }
}

export default Control;

 

➡️각각 App.js와 Conreol에 내용을 추가함으로써 mode를 변경한다.

 

mode 전환과 onSubmit 이벤트

➡️create 버튼을 누르면 mode가 create로 바뀌고, ReadContent대신 CreateContent를 띄우면서 title과 description을 직접 적어서 title과 desc 값으로 표현할 수 있는 이벤트 구현

 

📢우리가 적은 title과 description 값은 직접 확인하면 이 위치에서 확인 할 수 있다.

📢따라서 띄우고 싶은 title과 description 값을 변경해주려면 이 위치에서 가져올 수 있다.

App.js 추가내용

import ReadContent from "./components/ReadContent"
import CreateContent from "./components/CreateContent"

var _title, _desc, _article = null;

    if (this.state.mode === 'welcome') {
      _title = this.state.welcome.title;
      _desc = this.state.welcome.desc;
      _article = <ReadContent title={_title} desc={_desc}></ReadContent>;
    } else if (this.state.mode === 'read') {
      var i = 0;
      while (i < this.state.contents.length) {
        var now_data = this.state.contents[i];
        if (now_data.id === this.state.selected_content_id) {
          _title = now_data.title;
          _desc = now_data.desc;
        }
        i = i + 1;
      }
      _article = <ReadContent title={_title} desc={_desc}></ReadContent>;
    } else if (this.state.mode === 'create') {
      _article = <CreateContent onSubmit={function(_title, _desc){
        // add content to this.state.contents
        console.log(_title);
        console.log(_desc);
      }.bind(this)}></CreateContent>
    }

 

추가된 components 하위 파일 CreateContent.js

import React, { Component } from 'react';

class CreateContent extends Component {
  render() {
    return (
      <article>
        <h2>Create</h2>
        <form action="/create_process" method="post" onSubmit={function(e){
          e.preventDefault();
          this.props.onSubmit(
            e.target.title.value,
            e.target.desc.value
          );
          alert('submit!!');
        }.bind(this)}>
          <p><input type="text" placeholder="title" name="title"></input></p>
          <p><textarea name="desc" placeholder="description"></textarea></p>
          <p><input type="submit"></input></p>
        </form>
      </article>
    );
  }
}

export default CreateContent;

 

➡️각각 App.js와 Conreol에 내용을 추가함으로써 mode가 create로 변경될 시 ReacContent대신 CreateContent라는 title과 desc를 입력할 수 있는 입력창이 띄워지고, 각각 title값과 description 값을 입력하여 제출하면 콘솔창에서 각 title과 description 값을 확인 할 수 있다.

 

'React' 카테고리의 다른 글

[React] Day 9 - props  (0) 2023.09.08
[React] Day 8 - create 구현 2  (0) 2023.09.01
[React] Day 6 - 컴포넌트 이벤트 만들기  (0) 2023.08.30
[React] Day 5 - event 개념  (0) 2023.08.29
[React] Day 4 - state  (0) 2023.08.28