Vue HOC设置问题(使用vue-compose)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue HOC设置问题(使用vue-compose)相关的知识,希望对你有一定的参考价值。

我正在尝试按照函数式编程进行设置。由于某种原因,我的index.js文件没有将道具传递给我HelloWorld.vue组件。下面是index.js文件。

import { compose, withData, withProps, withHandlers } from 'vue-compose';
import Vue from 'vue';
import HelloWorld from './HelloWorld.vue';


export const enhancer = compose(
    withData({
      someInjectedProp: {
        initialValue: "Bla bla"
      },
      ecosystem:  {
          iniitalValue: [
            {
              text: 'vuetify-loader',
              href: 'https://github.com/vuetifyjs/vuetify-loader'
            },
            {
              text: 'github',
              href: 'https://github.com/vuetifyjs/vuetify'
            },
            {
              text: 'awesome-vuetify',
              href: 'https://github.com/vuetifyjs/awesome-vuetify'
            }
          ],
      },
      importantLinks: {
          initialValue: [
            {
              text: 'Documentation',
              href: 'https://vuetifyjs.com'
            },
            {
              text: 'Chat',
              href: 'https://community.vuetifyjs.com'
            },
            {
              text: 'Made with Vuetify',
              href: 'https://madewithvuetifyjs.com'
            },
            {
              text: 'Twitter',
              href: 'https://twitter.com/vuetifyjs'
            },
            {
              text: 'Articles',
              href: 'https://medium.com/vuetify'
            }
          ],
      },
      whatsNext: {
          iniitalValue: [
            {
              text: 'Explore components',
              href: 'https://vuetifyjs.com/components/api-explorer'
            },
            {
              text: 'Select a layout',
              href: 'https://vuetifyjs.com/layout/pre-defined'
            },
            {
              text: 'Frequently Asked Questions',
              href: 'https://vuetifyjs.com/getting-started/frequently-asked-questions'
            }

          ] 
      }
    }),
    // withProps((props) => ({
    //   customFunction(this: Vue){
    //     //do something like call api
    //   }
    // }))
  )

  export default enhancer(HelloWorld);

以下是应该接收道具的vue组件,但不是:

  <v-container>
    <v-layout
      text-xs-center
      wrap
    >
      <v-flex xs12>
        <v-img
          :src="require('../assets/logo.svg')"
          class="my-3"
          contain
          height="200"
        ></v-img>
      </v-flex>

      <v-flex mb-4>
        <h1 class="display-2 font-weight-bold mb-3">
          Welcome to Vuetify
        </h1>
        <p class="subheading font-weight-regular">
          For help and collaboration with other Vuetify developers,
          <br>please join our online
          <a href="https://community.vuetifyjs.com" target="_blank">Discord Community</a>
        </p>
      </v-flex>

      <v-flex
        mb-5
        xs12
      >
        <h2 class="headline font-weight-bold mb-3">What's next?</h2>

        <v-layout justify-center>
          <a
            v-for="(next, i) in whatsNext"
            :key="i"
            :href="next.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ next.text }}
          </a>
        </v-layout>
      </v-flex>

      <v-flex
        xs12
        mb-5
      >
        <h2 class="headline font-weight-bold mb-3">Important Links</h2>

        <v-layout justify-center>
          <a
            v-for="(link, i) in importantLinks"
            :key="i"
            :href="link.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ link.text }}
          </a>
        </v-layout>
      </v-flex>

      <v-flex
        xs12
        mb-5
      >
        <h2 class="headline font-weight-bold mb-3">Ecosystem</h2>

        <v-layout justify-center>
          <a
            v-for="(eco, i) in ecosystem"
            :key="i"
            :href="eco.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ eco.text }}
          </a>
        </v-layout>
      </v-flex>
    </v-layout>
  </v-container>
</template>

<script>
  export default {
    props: ['someInjectedProp','ecosystem','importantLinks','whatsNext']
  }
</script>

<style>

</style>

当查看vue devtools时,我可以看到所有的道具都是undefined而没有接收索引文件中定义的值。

答案

我的一位同事发现了这个问题,它实际上是在app.vue文件中(运行create vue <app name>时创建的)导入查找.componentsHelloWorld.vue,一旦使用HOC,它需要导入.componentsindex

以上是关于Vue HOC设置问题(使用vue-compose)的主要内容,如果未能解决你的问题,请参考以下文章

material-ui / 如何使用 'withStyles()' 设置 HOC 样式?

在 react 里写 vue3 ? 还写了自定义 hooks和 Hoc 构建了响应式 !

使用 HOC 可拖动元素反应 DnD 引发无法设置未定义错误的属性“道具”

在 Xcode 4 中,如何构建“Debug”、“Ad hoc”和“Store”设置?

Ansible Ad-Hoc命令集

无法使新的 Ad Hoc 配置文件正常工作