inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

프로젝트로 배우는 Vue.js 3

vue3로 오면서 methods를 setup으로 바꾸며 헷갈리는 점이 있습니다.

해결된 질문

194

swc9803

작성한 질문수 0

0

삭제된 글입니다

vuex vuejs 웹앱

답변 4

0

swc9803

v-model="form.title" 을 v-model="title"로 고치지 않았네요
고치고 나니 잘 작동합니다 도움주셔서 감사합니다

0

코지 코더

const title = ref('');
const saveForm = async () => {
    await db.collection('forms').add({
        title: title.value,
    }).then(...)
}

ref를 사용할 경우 위 코드 처럼. ref를 사용하면 .value를 해줘야합니다

const form = reactive({
    title: ''
});
const saveForm = async () => {
    await db.collection('forms').add({
        title: form.title,
    }).then(...)
}

이건 reactive를 사용할때 이런식으로 하시면 될거예요~

코드들은 전부 setup 함수안에 넣고 data() 와 methods: {} 는 전부 지우셨죠?

위에 코드로 문제가 해결이 되면 좋겠네요. 그래도 안되면 다시 질문 올려주세요~

0

swc9803

답변 감사합니다.
둘 다 시도해 봤지만 v-model이 전달한 값을 setup에서 읽지 못하네요
제가 백엔드 지식이 부족한가 봅니다.
methods를 setup으로 바꾸는 법은 감을 잡게 되었습니다. 감사합니다.

0

코지 코더

setup 함수에서 return 해주셨나요?

setup() {
  const title = ref('');
  const saveForm = async () => {
      await db.collection('forms').add({
          title: title.value,
      }).then(...)
  }
  
  return {
    title
  }
}

이렇게 사용할 ref를 return에 넣어주셔야 template에서 사용하실수가 있어요~

0

swc9803

강의를 보고 학습할 때에는 json을 사용했지만

전부 학습한 후에는 다른 것을 사용해 서버를 열어보고 싶어 구글의 파이어스토어를 쓰는 중입니다.

파이어스토어는 강의 하신 내용과는 관련이 없어 답변하시기 곤란하실 것 같아 일부만 질문 드렸습니다.

이전 질문을 다시 말하자면 아래 코드에서

methods: { 를 setup () {으로 바꾼다고 할 때 this를 쓰지 말아야 하기 때문에

await db.collection('forms').add에 있는 title: this.form.title 부분을 title: form.title로 바꾸니 title이 선언되지 않았다는 에러가 뜹니다.

그래서 어떻게 바꿔야 할지 몰라 질문을 드렸습니다. 

여기가 백엔드 강의가 아님에도 이런 질문을 드려 죄송합니다.

<template>
<div>
  <h1 class="ml-5">글 작성하기</h1>
  <hr>
  <div class="form">
    <form>
      <label>Title</label>
        <div class="row">
          <div class="col-6">
            <input type="text" v-model="form.title" required>
          </div>
          <div class="col-12">
            <div class="form-group">
              <label>Content</label>
              <textarea v-model="form.content" required></textarea>
            </div>
          </div>
        </div>
    </form>
  <button class="btn btn-primary" @click="saveform">저장</button>
  </div>
</div>
</template>

<script>
import { db } from '@/fdb'
import firebase from 'firebase'

export default {
  data () {
    return {
      form: {
        title: '',
        content: '',
        createdAt: '',
        updatedAt: '',
        uid: '',
        displayName: ''
      }
    }
  },
  methods: {
    async saveform () {
      const uid = firebase.auth().currentUser.uid
      const name = firebase.auth().currentUser.displayName
      const createdAt = new Date()
      const updatedAt = new Date()
        if (this.form.title === '' || this.form.content === '') {
          alert('내용을 입력해주세요!')
        } else {
          await db.collection('forms').add(
            {
              title: this.form.titlecontent: this.form.contentcreatedAtupdatedAtuidname
            }
          ).then(() => {
            alert('작성 완료!')
            this.form.title = ''
            this.form.content = ''
            this.$router.push({
              name: 'Board'
            })
          }).catch((error=> {
            alert('Error : ' + error.message)
          })
        }
      }
    }
  }
}
</script>

0

코지 코더

title: form.title 이 부분이 어디서 사용하시는지 잘 모르겠어요~

그런데 setup을 사용할땐 this를 쓰지 않는것은 맞습니다.

아래 처럼 form이라는 reactive를 정의하고 사용하시는건가요? 

const form = reactive({title: ''})

지금 작성하고 계신 파일의 코드를 복사해서 올려주시면 한번 살펴보도록 하겠습니다 ^^

그리고 어떤 에러가 났는지도 올려주세요~

numberOfPages 결과 nan

0

426

2

todos 질문입니다.

0

294

2

작동은 되긴 하는데 해당 메세지는 왜 뜨는걸까요?

1

372

0

강의노트 문의

0

377

1

x-total-count 및 db.json id값 문제

0

921

1

개발툴 글자체, 크기, 색깔 세팅 문의

0

225

1

onMount 관련 강의가 몇강에 있었죠?ㅠㅠ

0

309

1

json server실행/중지 문의드립니다!

0

484

1

3:53 분에 HelloWorld 태그 인식을 못해서 오류 발생하비낟!

0

468

1

Composition API?

0

396

1

24강에서 computed의 종속성이 변경도록 return하는데, 그러면 computed가 다시 실행되나요?

0

398

1

구조가 다름...

0

486

1

59강 API body 질문입니다.

0

301

1

로그인과 같이 레이아웃이 완전 다른 페이지를 만들때는 router 를 어떻게 할까요?

0

439

1

vue CLI 설치 관련 문의드립니다.

0

591

1

31강 DB질문

0

419

1

to와 :to의 차이점

0

449

1

52강의 originalTpdp ref 와 todo ref

0

555

1

delete todo 함수를 prop으로 내려주지 않는 이유는 무엇인가요??

0

411

1

computed 와 검색 기능 추가 질문드려요.

0

446

1

[33강] pagination2 numberOfPages 호출

0

381

1

리렌더링 관련 질문

0

337

1

배포 관련 질문드립니다.

0

312

1

30강 질문드립니다.

0

222

1