프로젝트

트위터 클론코딩 - CRUD 3

규몽 2020. 11. 27. 00:18

Delete 


삭제버튼에 넣어줄 함수 onDelete( )를 만들어 그안에 javascript의 윈도우 객체 confrim( ) 메소드를 이용해서 알림창을 띄워줄거다.

confrim은 알림창을 띄워주고 확인을 누르면 true, 취소를 누르면 false를 반환한다. 

 

  const onDelete = () => {
    const ok = window.confirm("정말 삭제 할건가요?");
    if(ok){
        // delete
    }
  };

 

delete 기능은 firebase 문서를 보면된다. 참조를 만들어야 되는데 여기서 참조 주소는 

dbService의 doc 안에 컬렉션이름/만든유저의 id다. 그 뒤 delete( ) 메소드를 해주면 끝이다.

dbService.doc(`gweets/${GweetObj.id}`).delete();

 

 

Update


수정버튼을 누르면 기존화면에서 수정창 화면을 보여주기 위해 초기값이 true인 state를 만들어 준다.

그리고 onToggle( ) 함수를 만들어 수정버튼에 넣어주고 누를때마다 Toggle값이 바뀌고 그값으로 조건부 렌더링을 해준다. 

<button onClick={onToggle}>수정</button>
 const [Toggle, setToggle] = useState(true);
 
   const onToggle = () => {
    setToggle(!Toggle);
  };

 

 

수정 버튼을 누르면 위처럼 나오게 간단하게 form을 만들어 주고 취소버튼을 누르면 onToggle( ) 메소드를 호출해 다시 원레 트윗 화면을 띄워준다.

 

  <>
      {Toggle ? (
        <div>
          <h4>{GweetObj.text}</h4>
          {isOwner && (
            <>
              <button onClick={onDelete}>삭제</button>
              <button onClick={onToggle}>수정</button>
            </>
          )}
        </div>
      ) : (
        <>
          <form onSubmit={onSubmit}>
            <input type="text" onChange={onChange} required />
            <input type="submit" value="수정" />
          </form>
          <button onClick={onToggle}>취소</button>
        </>
      )}
    </>

 

그리고 form에 onSubmit( )함수를 만들어 넣어주고 그 함수의 로직은 다음과 같다.

 

Delete 때 와 별 차이는 없다. NewGweet state를 만들어 이전 text값을 초기값으로 넣어주고 

onChnage( )함수에서 input 값이 바뀌면 setNewGweet(e.target.value)해준다.

그리고 onSubmit( )에선 delete 때 처럼 컬렉션/유저아이디 접근 후 update( ) 메소드를 호출 그 뒤 객체값을 수정 해주면 된다.

의문은 불변성을 지켜주지 않아도 되나? 이다. 누가보면 댓글좀... ㅠㅠ

 

    const [NewGweet, setNewGweet] = useState(GweetObj.text);
  
  const onChange = (e) => {
    setNewGweet(e.target.value);
  };
  
  const onSubmit = async (e) => {
    await dbService.doc(`gweets/${GweetObj.id}`).update({
      text: NewGweet,
    });
    e.preventDefault();
    setToggle(!Toggle);
  };