Coding Note

[React] CRUD 본문

React

[React] CRUD

jinnkim 2022. 4. 29. 23:30

 

 

 

게시물 CRUD 구현하기!

 

 


상태 선언

 

1. 선언 타입이 원시 타입(실제 데이터 값을 저장하는 타입)인 경우

원시 타입) String, Number, bigint, boolean, undefined, symbol, null 

const[value, setValue] = useState(PRIMITYPE);

 

 

2. 참조 타입인 경우

참조 타입) Object, Array

참조 타입인 경우 객체를 복제하여 복제한 객체에 변경된 값을 저장한다.

 

const[value, setValue] = useState(Object);

 

newValue={...value}
복제본 newValue 변경
setValue(newValue) 변경된 값을 set에 넣는다!

 

 


 

1. Create

 

- Create Component

function Create(props){
  return <article>
      <h2>Create</h2>
      <form onSubmit={event=>{
        event.preventDefault();
        const title = event.target.title.value;
        const body =event.target.body.value;
        props.onCreate(title, body);
      }}>
        <p><input type="text" name="title" placeholder="title"/></p>
        <p><textarea name='body' placeholder="body"></textarea></p>
        <p><input type="submit" value="Create"></input></p>
      </form>
  </article>
}

 

- APP

else if(mode === 'CREATE') {
    content = <Create onCreate={(_title, _body)=> {
      const newTopic ={id:nextId, title:_title, body:_body}
      const newTopics = [...topics] //복제
      newTopics.push(newTopic); //값 변경
      setTopics(newTopics); //변경된 값 저장
      setMode('READ');
      setId(nextId);
      setNextId(nextId+1);
    }}></Create>
 <ul>
     <li> <a href='/create' onClick={event=>{
         event.preventDefault();
         setMode('CREATE');
             }}>Create</a></li>
      {contextControl}
</ul>

 

 

 

2. Read

 

- App

else if(mode === 'READ') {
    let title, body = null;
    for(let i =0; i<topics.length; i++){
      if(topics[i].id === id) {
        title = topics[i].title;
        body = topics[i].body;
      }
    }

 

 

 

 

 

3. Update (Create+Read)

 

- Update Component

function Update(props) {
  const [title, setTitle] = useState(props.title);
  const [body, setBody] = useState(props.body);
  return <article>
  <h2>Update</h2>
  <form onSubmit={event=>{
    event.preventDefault();
    const title = event.target.title.value;
    const body =event.target.body.value;
    props.onUpdate(title, body);
  }}>
      <p><input type="text" name="title" placeholder="title" value={title} onChange={event=>{
        console.log(event.target.value);
        setTitle(event.target.value);
      }}/></p>
        <p><textarea name='body' placeholder="body" value={body} onChange={event=>{
          console.log(event.target.value);
          setBody(event.target.value);
        }}></textarea></p>
        <p><input type="submit" value="Update"></input></p>
      </form>
  </article>
}

 

- App

 <li><a href={'/update/'+id} onClick={event=>{
      event.preventDefault();
      setMode('UPDATE');
    }}>Update</a></li>
else if(mode === 'UPDATE') {
    let title, body = null;
    for(let i =0; i<topics.length; i++){
      if(topics[i].id === id) {
        title = topics[i].title;
        body = topics[i].body;
      }
    }
    content = <Update title={title} body={body} onUpdate={(title, body)=>{
      console.log(title, body);
      const newTopics = [...topics]
      const updateTopic = {id:id ,title:title, body:body}
      for(let i=0; i<newTopics.length; i++){
        if(newTopics[i].id === id){
          newTopics[i]= updateTopic;
          break;
        }
      }
      setTopics(newTopics);
      setMode('READ');
    }}></Update>

 

 

 

 

 

4. Delete(비교적 쉬움)

 

- App

<li><input type="button" value="Delete" onClick={()=>{
        const newTopics = []
        for(let i=0; i<topics.length; i++) {
          if(topics[i].id !== id) {
            newTopics.push(topics[i]);
          }
        }
        setTopics(newTopics);
        setMode('WELCOME');
      }} /></li>

 

 

 

CRUD 완!

'React' 카테고리의 다른 글

[React] React 정리_2  (0) 2022.05.23
[React] React 정리_1  (0) 2022.05.19
[React] 간단한 웹 페이지 만들기_components, props, state  (0) 2022.04.29
React 환경 세팅, 빌드  (0) 2022.04.29
Comments