Vue의 간결한 API를 위한 양방향 데이터 바인딩. 대화상자 예시.
7514 단어 vuejavascriptreact
React는 항상 이것에 대해 매우 엄격했으며, 이는 예를 들어 인기 있는 Material UI 라이브러리에서 매우 자주 보이는 패턴으로 이어집니다.
대화 상자 구성 요소를 사용하여 구성 요소 라이브러리를 생성하려는 상황을 상상해 보십시오.
단순화를 위해 예제에는 대화 상자를 닫는 버튼만 있습니다.
부모 구성 요소에는 대화 상자의 열린 상태를 토글하는 추가 버튼이 있으며 대화 상자 구성 요소는 "자신을 닫을"수 있습니다.
이것은 일반적으로 이 구성 요소가 React에서 사용되는 방식입니다.
import React, { useState } from 'react'
import EasyDialog from './components/EasyDialog'
function App() {
const [open, setOpen] = useState(true)
return (
<div>
<button
onClick={() => {
setOpen(!open)
}}
>
Toggle the dialog
</button>
<EasyDialog
open={open}
onClose={() => {
setOpen(false)
}}
/>
</div>
)
}
export default App
그리고 이것은 구성 요소의 코드입니다.
import React from 'react'
function EasyDialog({ open, onClose }) {
return (
open && (
<div>
<button onClick={onClose}>Close me</button>
</div>
)
)
}
export default EasyDialog
onClose
구성 요소에서 대화 상자로 전달되는 소품인 App
를 호출하도록 대화 상자에 지시해야 하는 것이 잘못되었다고 생각합니까?솔직히 말해서 이 상용구는 양방향 데이터 바인딩보다 더 나쁩니다. 여기서 자식은 사실상 부모의 메서드를 실행하고 있습니다!
Vue에서는 사용자 지정 v-모델이라고도 하는 사용자 지정 양방향 데이터 바인딩을 만들 수 있으므로 이 문제가 존재하지 않습니다.
이것은 동등한 앱이 Vue에서 보이는 방식입니다.
<script setup>
import { ref } from 'vue'
import EasyDialog from './components/EasyDialog.vue'
const open = ref(true)
</script>
<template>
<div>
<button @click="open = !open">Toggle the dialog</button>
<EasyDialog v-model="open" />
</div>
</template>
이 API가 훨씬 더 좋지 않습니까? 자식 구성 요소에 함수를 전달할 필요가 없습니다. 다음을 내보내는 것은 자식입니다.
<script setup>
defineProps(['modelValue'])
defineEmits(['update:modelValue'])
</script>
<template>
<div v-if="modelValue">
<button @click="$emit('update:modelValue', false)">Close me</button>
</div>
</template>
훨씬 더 간결하게 ...
Vue는 그것을 가능하게 하고, Svelte는 그것을 가능하게 합니다. React는 아마도 그러한 인체공학을 도입하지 않을 것입니다.
React 팀은 그렇게 해야 할 이유가 있고 대부분의 React 개발자는 이 접근 방식에 편안함을 느끼므로 Vue 개발자로서 저는 확실히 이 결정에 의문을 제기하지 않고 행복한 사람이 될 것입니다 :D
Reference
이 문제에 관하여(Vue의 간결한 API를 위한 양방향 데이터 바인딩. 대화상자 예시.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vmoe/two-way-data-binding-for-concise-apis-in-vue-the-dialog-example-59m4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)