關於vue3 解決getCurrentInstance 打包後線上環境報錯問題
getCurrentInstance
getCurrentInstance
支持訪問內部組件實例。
WARNING
getCurrentInstance
隻暴露給高階使用場景,典型的比如在庫中。強烈反對在應用的代碼中使用getCurrentInstance
。請不要把它當作在組合式 API 中獲取this
的替代方案來使用。
import { getCurrentInstance } from 'vue' const MyComponent = { setup() { const internalInstance = getCurrentInstance() internalInstance.appContext.config.globalProperties // 訪問 globalProperties } }
打印信息:
getCurrentInstance
隻能在setup或生命周期鉤子中調用。
如需在 setup或生命周期鉤子外使用,請先在
setup
中調用getCurrentInstance()
獲取該實例然後再使用。
setup() { const internalInstance = getCurrentInstance() // 有效 const id = useComponentId() // 有效 const handleClick = () => { getCurrentInstance() // 無效 useComponentId() // 無效 internalInstance // 有效 } }
本地使用示例:
當前在本地使用沒有問題,線上環境會報錯,不建議使用
<script> import {getCurrentInstance} from "vue"; export default { components: { }, setup() { const {ctx} = getCurrentInstance(); console.log(ctx,"屬性1") } </script>
查看打印:
項目中使用:表單table列表查詢
方法1: 不推薦
setup() { const {ctx} = getCurrentInstance(); console.log(ctx,"屬性1") //表單查詢方法 const submitForm = (formName) =>{ ctx.$refs[formName].validate(valid => { if (valid) { ruleForm.pageNum = 1; getTableData(); } else { console.log("error submit!!"); return false; } }); } }
方法2:推薦此用法,才能在你項目正式上線版本正常運行,避免線上報錯問題
解決:用proxy代替ctx。在結構的時候直接將proxy解構出來
setup() { let {proxy} = getCurrentInstance(); console.log(proxy,"屬性2"); //表單查詢方法 const submitForm = (formName) =>{ proxy.$refs[formName].validate(valid => { if (valid) { ruleForm.pageNum = 1; getTableData(); } else { console.log("error submit!!"); return false; } }); } }
打印:
到此這篇關於vue3 解決getCurrentInstance 打包後線上環境報錯問題的文章就介紹到這瞭,更多相關vue3 getCurrentInstance 打包報錯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- vue實現登錄滑動拼圖驗證
- vue表單驗證rules及validator驗證器的使用方法實例
- vue3中getCurrentInstance示例講解
- el-form resetFields無效和validate無效的可能原因及解決方法
- VUE實現註冊與登錄效果