av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Vue 中如何將函數(shù)作為 props 傳遞給組件的實(shí)現(xiàn)代碼

瀏覽:2日期:2023-01-21 14:09:56

本文 GitHub https://github.com/qq44924588 ... 上已經(jīng)收錄,更多往期高贊文章的分類(lèi),也整理了很多我的文檔,和教程資料。歡迎Star和完善,大家面試可以參照考點(diǎn)復(fù)習(xí),希望我們一起有點(diǎn)東西。

Vue 新手經(jīng)常問(wèn)的一個(gè)常見(jiàn)問(wèn)題。可以將字符串、數(shù)組、數(shù)字和對(duì)象作為props傳遞。但是你能把一個(gè)函數(shù)當(dāng)作一個(gè)props來(lái)傳遞嗎?

雖然可以將函數(shù)作為props傳遞,但這種方式不好。相反,Vue 有一個(gè)專(zhuān)門(mén)為解決這問(wèn)題而設(shè)計(jì)的功能,接下來(lái),我們來(lái)看看。

向組件傳入函數(shù)

獲取一個(gè)函數(shù)或方法并將其作為一個(gè)prop傳遞給子組件相對(duì)比較簡(jiǎn)單。實(shí)際上,它與傳遞任何其他變量方式完全相同:

<template> <ChildComponent :function='myFunction' /></template>export default { methods: { myFunction() { // ... } }};

正如前面所說(shuō),在Vue中永遠(yuǎn)都不要做這樣的事情。

為什么?Vue有更好的東西。

大家都說(shuō)簡(jiǎn)歷沒(méi)項(xiàng)目寫(xiě),我就幫大家找了一個(gè)項(xiàng)目,還附贈(zèng)【搭建教程】。

React vs Vue

如果使用過(guò) React,就會(huì)習(xí)慣傳遞函數(shù)方式。

在React中,我們可以將一個(gè)函數(shù)從父組件傳遞給子組件,以便子組件能夠向上與父組件通信。props 和 data 向下流動(dòng),函數(shù)調(diào)用向上流動(dòng)。

然而,Vue有一種不同的機(jī)制來(lái)實(shí)現(xiàn)子到父通信方式,Vue 使用事件。

這與 DOM 的工作方式相同-與React相比,Vue 的方式與瀏覽器的一致性更高。 元素可以發(fā)出事件,并且可以監(jiān)聽(tīng)這些事件。

因此,盡管在Vue中可以把函數(shù)作為prop傳遞,但它被認(rèn)為是一種反模式。

使用事件

事件是我們與 Vue 中的父組件通信的方式。

這里有一個(gè)簡(jiǎn)短的例子來(lái)說(shuō)明事件是如何工作的。

首先,我們將創(chuàng)建子組件,該子組件在創(chuàng)建時(shí)會(huì)發(fā)出一個(gè)事件:

// ChildComponentexport default { created() { this.$emit(’created’); }}

在父組件中,我們監(jiān)聽(tīng)該事件:

<template> <ChildComponent @created='handleCreate' /></template>export default { methods: { handleCreate() { console.log(’Child has been created.’); } }};

事件可以做的事情還有很多,而這僅僅是皮毛。強(qiáng)烈建議查看官方的Vue文檔來(lái)了解更多關(guān)信息,絕對(duì)值得一讀。

但是事件并不能完全解決我們所有的問(wèn)題。

從子組件訪問(wèn)父組件的作用域里數(shù)據(jù)

在許多情況下,我們?cè)噲D解決的問(wèn)題是訪問(wèn)來(lái)自不同作用域的數(shù)據(jù)。

父組件有一個(gè)作用域,子組件有另一個(gè)作用域。

通常,我們希望從父組件訪問(wèn)子組件中的值,或者從子組件訪問(wèn)父組件中的值。Vue阻止我們直接這樣做,這是一件好事。

它使我們的組件更加具有封裝性,并提高了它們的可重用性。這使我們的代碼更簡(jiǎn)潔,并從長(zhǎng)遠(yuǎn)來(lái)看避免了許多令人頭痛的問(wèn)題。

但是有時(shí)候我們可能會(huì)試圖通過(guò)函數(shù)來(lái)繞過(guò)這個(gè)問(wèn)題。

從父類(lèi)獲取值

如果希望子組件訪問(wèn)父組件的方法,那么將方法直接作為 prop 傳遞似乎簡(jiǎn)單明了。

在父組件中我們會(huì)這樣做:

<!-- Parent --><template> <ChildComponent :method='parentMethod' /></template>// Parentexport default { methods: { parentMethod() { // ... } }}

在我們的子組件中,使用傳入的方法:

這樣做會(huì)有什么問(wèn)題?

這并不是完全錯(cuò)誤的,但是在這種情況下使用事件會(huì)更好。

然后,當(dāng)需要時(shí),子組件不會(huì)調(diào)用該函數(shù),而只是發(fā)出一個(gè)事件。然后父組件將接收該事件,調(diào)用該函數(shù),拼裝將更新傳遞給子組件的 prop。

這是達(dá)到同樣效果的更好的方法。

在其他情況下,我們可能想要從子元素中獲取一個(gè)值到父元素中,我們?yōu)榇耸褂昧撕瘮?shù)。

例如,你可能正在這樣做。父函數(shù)接受子函數(shù)的值并對(duì)其進(jìn)行處理:

<!-- Parent --><template> <ChildComponent :method='parentMethod' /></template>// Parentexport default { methods: { parentMethod(valueFromChild) { // Do something with the value console.log(’From the child:’, valueFromChild); } }}

在子組件中調(diào)用傳入的方法并將子組件的值作為方法的參數(shù)傳入:

// Childexport default { props: { method: { type: Function }, }, data() { return { value: ’I am the child.’ }; }, mounted() { // Pass a value to the parent through the function this.method(this.value); }}

這也不是完全錯(cuò)誤的,這樣做是可行的。

只是這不是在Vue中的最佳方式。相反,事件更適合解決這個(gè)問(wèn)題。我們可以使用事件來(lái)實(shí)現(xiàn)完全相同的事情

<!-- Parent --><template> <ChildComponent @send-message='handleSendMessage' /></template>// Parentexport default { methods: { handleSendMessage(event, value) { // Our event handler gets the event, as well as any // arguments the child passes to the event console.log(’From the child:’, value); } }}

在子組件中,我們發(fā)出事件:

// Childexport default { props: { method: { type: Function }, }, data() { return { value: ’I am the child.’ }; }, mounted() { // Instead of calling the method we emit an event this.$emit(’send-message’, this.value); }}

事件在Vue中非常有用,但它們也不能100%地解決我們的問(wèn)題。有時(shí),我們需要以不同的方式從父級(jí)訪問(wèn)子級(jí)的作用域。

為此,我們使用作用域插槽!

使用作用域插槽

作用域插槽是一個(gè)更高級(jí)的主題,但是它們也非常有用。事實(shí)上,我認(rèn)為它們是Vue提供的最強(qiáng)大的功能之一。

它們?nèi)趸俗幼饔糜蚝透缸饔糜蛑g的界限。但是它以一種非常干凈的方式完成,使得我們的組件像以前一樣可組合。

如果你想了解更多關(guān)于作用域插槽是如何工作的,可以先看看官方文檔,或者我們下回講解。

代碼部署后可能存在的BUG沒(méi)法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。

來(lái)源:https://stackoverflow.com/que...

總結(jié)

到此這篇關(guān)于Vue 中如何將函數(shù)作為 props 傳遞給組件的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)vue props 傳遞給組件內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 国产成人精品一区二区三区在线观看 | 欧美激情欧美激情在线五月 | 国产成人午夜精品影院游乐网 | 91最新视频 | 精品国产视频 | 欧美一区二区三区视频在线播放 | 亚洲免费在线视频 | 精品美女在线观看视频在线观看 | 亚洲人成人网 | 91在线看网站 | h在线免费观看 | 亚洲福利在线观看 | 日韩欧美在线视频播放 | 亚洲综合在线一区二区 | 中文字幕一区二区在线观看 | 91成人免费看片 | 亚洲黄色片免费观看 | 久久久精品视频一区二区三区 | 国产一级视频免费播放 | 激情五月婷婷在线 | 久久99这里只有精品 | 欧美日本一区 | 成人欧美一区二区三区在线播放 | a免费视频 | 成人av激情 | 欧美日韩综合精品 | 91视频在线看 | 日一区二区 | 亚洲日本免费 | 一区二区在线不卡 | 无码日韩精品一区二区免费 | 精品在线一区 | 久久久久久亚洲欧洲 | 精品国产一区二区三区四区在线 | 综合国产| 欧美国产精品一区二区三区 | 久久久精品视频一区二区三区 | 中文字幕一区在线观看视频 | 免费视频一区二区 | 伊人电影院av | 久久精品一二三影院 |