require は同期ですか、それとも非同期ですか?

 結論は

  require(['../ccc.js'],function(){})是异步加载
  require('../ccc.js') 同步加载
  require参数只是一个路径时,是同步,参数是一个数组时就是异步加载

今日問題が発生しました。ボタンをクリックして、渡されたパラメータに従って異なるコンポーネントを表示しました。同じボタンを初めてクリックしたとき、コンポーネントを取得できませんでした。コンポーネントが存在しないというエラーが報告されました。当然、内部のメソッドを呼び出すことはできませんが、古いバージョンのコードではこの問題は発生せず、調査の結果、require関数の呼び出し方法が異なるため、コードのバージョンによっては正常に実行される場合と、バージョンによっては正常に実行される場合があることが判明しました。次のように、初めてロードするときにエラーを報告するには

<component
    :is="myComponent"   
    ref="currentComponent"  
/>
export default {
    data(){
        return{
            myComponent:'AsyncCom',
                 
        }    
    },
    props:{
        cnpPath:{
            type:String,
            default:''        
        }    
    },
    watch: {
        cnpPath(newval) {
            //1.require('***') 同步加载 可以正常获取到组件
           Vue.component('AsyncCom', require('/src/views' + newval).default)
           this.$nextTick(()=>{
               console.log(this.$refs.currentComponent)//查看打印结果是当前的组件        
           })
           //2. require(['../ccc.js'],function(){})是异步加载
           Vue.component('AsyncCom', (resolve)=>require(['/src/views'+ newval],resolve ))
           this.$nextTick(()=>{
               console.log(this.$refs.currentComponent)//打印结果undefined   
           })
        },
     methods:{
     }      
}

おすすめ

転載: blog.csdn.net/uniquepeng/article/details/129951643