WEB/REACT

[REACT] create, update, delete에 firestore적용하기

자바칩 프라푸치노 2021. 6. 30. 01:14

create, update, delete에 firestore적용하기

    • 순서
      • 파이어베이스랑 통신
      • 리듀서 고치기
      • 필요한 곳에서 import후 사용

 


 

(1) 파이어베이스와 통신

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 파이어베이스랑 통신하는 부분
export const addBucketFB = (bucket) => {
  return function (dispatch) {
    console.log(bucket);
    // 생성할 데이터를 미리 만들게요!
    let bucket_data = { text: bucket, completed: false };
 
    // add()에 데이터를 넘겨줍시다!
    bucket_db
      .add(bucket_data)
      .then((docRef) => {
        // id를 추가한다!
        bucket_data = { ...bucket_data, id: docRef.id };
 
        console.log(bucket_data);
 
        // 성공했을 때는? 액션 디스패치!
        dispatch(createBucket(bucket_data));
      })
      .catch((err) => {
        // 여긴 에러가 났을 때 들어오는 구간입니다!
        console.log(err);
        window.alert('오류가 났네요! 나중에 다시 시도해주세요!');
      });
  };
};
cs

 

 

 

(2) 리듀서를 고친다.

 

1
2
3
4
5
6
7
case "bucket/CREATE": {
      const new_bucket_list = [
        ...state.list,
        action.bucket,
      ];
      return { list: new_bucket_list };
    }
cs

 

(3) 필요한 곳에서 쓴다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
// App.js
...
// 잠깐!! addBucketFB를 import해오는 거 잊지말기!
const mapDispatchToProps = (dispatch) => ({
  load: () => {
    dispatch(loadBucketFB());
  },
  create: (new_item) => {
    console.log(new_item);
    dispatch(addBucketFB(new_item));
  }
});
...
cs

 

 

 

 

 

 


 

 

update

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 파이어베이스랑 통신하는 부분
export const updateBucketFB = (bucket) => {
  return function (dispatch, getState) {
    // state에 있는 값을 가져옵니다!
    const _bucket_data = getState().bucket.list[bucket];
 
    // id가 없으면? 바로 끝내버립시다.
    if (!_bucket_data.id) {
      return;
    }
 
    // 새로운 값을 만들어요!
    let bucket_data = { ..._bucket_data, completed: true };
 
    bucket_db
      .doc(bucket_data.id)
      .update(bucket_data)
      .then((res) => {
        dispatch(updateBucket(bucket));
      })
      .catch((err) => {
        console.log("err");
      });
  };
};
cs

 

delete

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
export const deleteBucketFB = (bucket) => {
  return function (dispatch, getState) {
    const _bucket_data = getState().bucket.list[bucket];
    // id가 없으면? 바로 끝내버립시다.
    if (!_bucket_data.id) {
      return;
    }
    // 삭제하기
    bucket_db
      .doc(_bucket_data.id)
      .delete()
      .then((res) => {
        dispatch(deleteBucket(bucket));
      })
      .catch((err) => {
        console.log("err");
      });
  };
};
cs

 

 

 

 

728x90