Home > Web Front-end > Vue.js > What is the difference between

    <script setup></script> is compile-time syntactic sugar for using the composition API in a single file component (SFC). This syntax is the default recommendation when using SFC with the composition API. Compared with the ordinary <script></script> syntax, it has more advantages:

    • Less boilerplate content and more concise code.

    • Ability to declare props and custom events using pure TypeScript.

    • Better runtime performance (its template will be compiled into a rendering function in the same scope, avoiding the need for rendering context proxy objects).

    • Better IDE type inference performance (less work for the language server to extract types from the code).

    The above is the description of <script setup> from the vue3 official website. In fact, <script setup> is a syntax sugar for the setup function.

    1. Basic syntax

    How to write the setup function

    <script>
    import { ref } from &#39;vue&#39;
    export default {
      setup () {
        const num = ref(1);
        return { num }
      }
    }
    </script>
    Copy after login

    The variables and functions defined in the setup function need to be returned, otherwise they cannot be used normally.

    How to write syntax sugar in <script setup>

    <script setup>
        import { ref } from &#39;vue&#39;
        const num = ref(1)
    </script>
    Copy after login

    Variables and functions defined in syntax sugar in <script setup> do not need to be returned. The code inside will be compiled into the content of the component setup() function. This means that unlike ordinary <script> which is only executed once when the component is first introduced, the code in <script setup> will be executed every time a component instance is created. time to execute.

    2. Differences in using external files

    setup function

    <template>
      <div>
        <h3> {{test(name)}}</h3>
      </div>
    </template>
    <script>
    import { ref } from &#39;vue&#39;
    import { test } from &#39;@/utils/test.js&#39;
    export default {
      setup () {
        const name = ref(&#39;huang&#39;)
        const testName = test 
        return { name, testName }
      }
    }
    </script>
    Copy after login

    setup function When using external files, it needs to be defined as a method in the setup function to use it normally.

    <script setup>Syntax sugar

    <template>
      <div>
        <h3>{{ test(name) }}</h3>
      </div>
    </template>
    <script setup>
    import { test } from &#39;@/utils/test.js&#39;
    import { ref } from &#39;vue&#39;
    const name = ref(&#39;huang&#39;)
    </script>
    Copy after login

    There is no need to define it as a method in <script setup> syntax sugar and can be used directly.

    3. Register component

    setup function

    <script>
    import Hello from &#39;@/components/HelloWorld&#39;
    export default {
      components: {
        Hello
      }
    }
    </script>
    Copy after login

    <script setup>Syntax sugar

    <script setup>
    import Hello from &#39;@/components/HelloWorld&#39;
    </script>
    Copy after login

    No need to register in component, you can use it directly.

    4. Use custom instructions

    setup function

    <template>
        <h2 v-onceClick>使用了setup函数</h2>
    </template>
    <script>
    export default {
      directives: {
        onceClick: {
          mounted (el, binding, vnode) {
            console.log(el)
          }
        }
      },
    }
    </script>
    Copy after login

    <script setup>Syntax sugar

    <template>
        <h2 v-my-Directive>使用了script setup</h2>
    </template>
    <script setup>
    const vMyDirective = {
      beforeMount: (el) => {
        console.log(el)
      }
    }
    </script>
    Copy after login

    Globally registered custom instructions will work normally. Local custom instructions do not need to be explicitly registered in <script setup>, but they must follow the naming convention of vNameOfDirective

    ##5. Passing from father to son Data communication

    <Com :num="100"></Com>
    Copy after login

    setup function

    <script>
    export default {
      props: {
        num: {
          type: Number,
          default: 1
        }
      },
      setup (props) {
        console.log(props)
      }
    }
    </script>
    Copy after login

    <script setup>Syntactic sugar

    <script setup>
    import { defineProps } from &#39;vue&#39;
    const props = defineProps({
      num: {
        type: Number,
        default: 1
      }
    })
    </script>
    Copy after login

    6. Data communication from child to parent

    setup function

    <script>
    export default {
      setup (props, context) {
        const sendNum = () => {
          context.emit(&#39;sendNum&#39;, 200)
        }
        return { sendNum }
      }
    }
    </script>
    Copy after login

    <script setup>Syntax sugar

    <script setup>
    import { defineProps, defineEmits } from &#39;vue&#39;
    const emit = defineEmits([&#39;submit&#39;])
    const sendNum = () => {
      emit(&#39;submit&#39;, 1000)
    }
    </script>
    Copy after login

    defineProps and defineEmits are compiler macros that can only be used in <script setup>. They do not need to be imported as they will be compiled during the <script setup> process.

    defineProps receives the same value as the props option, and defineEmits receives the same value as the emits option.

    defineProps and defineEmits will provide appropriate type deduction after the options are passed in.

    Options passed to defineProps and defineEmits are promoted from setup to the module's scope. Therefore, local variables declared in the setup scope cannot be referenced by passed options. Doing so will cause compilation errors. However, it can reference imported bindings because they are also within the module scope.

    7. defineExpose and expose

    The expose of the component defined using the

    setup function is enabled by default, and all instance variables and methods defined in the function will be exposed. Components using <script setup> are closed by default - that is, the public instance of the component obtained through template reference or $parent chain will not expose any # Binding declared in ##<script setup>. You can use the

    defineExpose

    compiler macro to explicitly specify the properties to be exposed in the <script setup> component. If you do not use defineExpose The currently referenced component instance variables and methods cannot be obtained. Used

    defineExpose

    <script setup>
    import { ref } from "vue";
    const type = ref("<script setup>语法糖");
    const msg = ref("使用了defineExpose");
    defineExpose({
      type,
      msg,
    });
    </script>
    Copy after login

    What is the difference between <script setup> and setup function in vue3 Not used

    defineExpose

    <script setup>
    import { ref } from "vue";
    const type = ref("<script setup>语法糖");
    const msg = ref("使用了defineExpose");
    </script>
    Copy after login

    What is the difference between <script setup> and setup function in vue38. Use with ordinary <script>

    You can use the regular

    tag and

    tag at the same time. In certain cases of need, a regular <script> may be used to declare options that cannot be declared in a <script setup>, such as inheritAttrs or custom options for plugins . <script><script setup>

      Declare named exports of the module.
    • 运行只需要在模块作用域执行一次的副作用,或是创建单例对象

    <script>
    // 普通 <script>, 在模块作用域下执行 (仅一次)
    runSideEffectOnce()
    // 声明额外的选项
    export default {
      name:&#39;header&#39;,
      inheritAttrs: false,
      customOptions: {}
    }
    </script>
    <script setup>
    // 在 setup() 作用域中执行 (对每个实例皆如此)
    </script>
    Copy after login

    九、顶层的 await

    <script setup> 中可以使用顶层 await。结果代码会被编译成 async setup()

    <script setup>
    const post = await fetch(&#39;https://api.com&#39;).then((r) => r.json())
    </script>
    Copy after login

    另外,await 的表达式会自动编译成在 await 之后保留当前组件实例上下文的格式。

    What is the difference between <script setup> and setup function in vue3

     十、限制<script setup> 使用src属性

    由于模块执行语义的差异,<script setup></script> 中的代码依赖单文件组件的上下文。当将其移动到外部的 .js 或者 .ts 文件中的时候,对于开发者和工具来说都会感到混乱。因此,<script setup></script> 不能和 src attribute 一起使用。

    The above is the detailed content of What is the difference between

    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template