当前位置:   article > 正文

【Vue3重点概念总结和实践七】(封装获取鼠标坐标组合函数 / 在具有CSS作用域的Vue单文件组件设置全局CSS样式:global() / 使用 h 渲染函数来实现一个组件)_:global css vue

:global css vue

目录

1、封装获取鼠标坐标组合函数

2、在具有CSS作用域的Vue单文件组件设置全局CSS样式

3、渲染函数

4、Vue3 + Vue-cli (1) 基础篇

5、Vue3+ Vue-cli (2) 组件篇


1、封装获取鼠标坐标组合函数

原题: 

https://github.com/webfansplz/vuejs-challenges/blob/main/questions/25-useMouse/README.zh-CN.md

答案:

  1. <script setup>
  2. import { onMounted, onUnmounted, ref } from 'vue'
  3. function useEventListener(target, event, callback) {
  4.   onMounted(() => {
  5.     target.addEventListener(event, callback)
  6.   })
  7.   onUnmounted(() => {
  8.     target.removeEventListener(event, callback)
  9.   })
  10. }
  11. function useMouse() {
  12.   let x = ref(0)
  13.   let y = ref(0)
  14.   useEventListener(window, 'mousemove', e => {
  15.     x.value = e.x
  16.     y.value = e.y
  17.   })
  18.   return {
  19.   x,
  20.     y
  21. }
  22. }
  23. const { x, y } = useMouse()
  24. </script>
  25. <template>
  26. Mouse position is at: {{ x }}, {{ y }}
  27. </template>

 

2、在具有CSS作用域的Vue单文件组件设置全局CSS样式

原题: 

vuejs-challenges/questions/27-global-css/README.zh-CN.md at main · webfansplz/vuejs-challenges · GitHub

答案:

全局选择器

如果想让其中一个样式规则应用到全局,比起另外创建一个 <style>,可以使用 :global 伪类来实现。

  1. <template>
  2.   <p>Hello Vue.js</p>
  3. </template>
  4. <style scoped>
  5. p {
  6.   font-size: 20px;
  7.   color: red;
  8.   text-align: center;
  9.   line-height: 50px;
  10. }
  11. /* 使其工作 */
  12. :global(body) {
  13.   width: 100vw;
  14.   height: 100vh;
  15.   background-color: burlywood !important;
  16. }
  17. </style>

文档:

单文件组件 CSS 功能 | Vue.js

3、渲染函数

原题: 

使用 h 渲染函数来实现一个组件。注意: 确保参数被正确传递、事件被正常触发和插槽内容正常渲染

https://github.com/webfansplz/vuejs-challenges/blob/main/questions/218-h-render-function/README.zh-CN.md

答案:

实现①:

  1. <script setup>
  2. import { h } from 'vue'
  3. import { ElButton } from 'element-plus'
  4. const onClick = () => {
  5.   console.log('onClick')
  6.   console.log(
  7.     Array.from({ length: 20 }).map(() => {
  8.       return h('p', 'hi')
  9.     })
  10.   )
  11. }
  12. const MyButton = (props, { slots }) => {
  13.   return h(
  14.     ElButton,
  15.     {
  16.       disabled: props.disabled,
  17.       onClick: props.onCustomClick
  18.     },
  19.     slots.default
  20.   )
  21. }
  22. </script>
  23. <template>
  24.   <MyButton :disabled="false" @custom-click="onClick">my button</MyButton>
  25. </template>

实现②:

  1. MyButton.vue组件:
  2. <script>
  3. import { defineComponent, h } from 'vue'
  4. import { ElButton } from 'element-plus'
  5. export default defineComponent({
  6.   name: 'MyButton',
  7.   emits: ['custom-click'],
  8.   render() {
  9.     return h(
  10.       ElButton,
  11. {
  12.         disabled: this.$props.disabled,
  13.         onClick: e => {
  14.           this.$emit('custom-click', e)
  15.         }
  16.       },
  17.     this.$slots.default
  18.     )
  19.   }
  20. })
  21. </script>
  22. 父组件:
  23. <script setup>
  24. import { h } from 'vue'
  25. import MyButton from './MyButton'
  26. const onClick = () => {
  27.   console.log('onClick')
  28.   console.log(
  29.     Array.from({ length: 20 }).map(() => {
  30.       return h('p', 'hi')
  31.     })
  32.   )
  33. }
  34. </script>
  35. <template>
  36.   <MyButton :disabled="false" @custom-click="onClick">my button</MyButton>
  37. </template>

文档:

渲染函数 & JSX | Vue.js

4、Vue3 + Vue-cli (1) 基础篇

Vue3 + Vue-cli (1) 基础篇_vue3 vue-cli_小草莓蹦蹦跳的博客-CSDN博客

5、Vue3+ Vue-cli (2) 组件篇

Vue3+ Vue-cli (2) 组件篇_vue3 text root nodes_小草莓蹦蹦跳的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/492614
推荐阅读
相关标签
  

闽ICP备14008679号