为了账号安全,请及时绑定邮箱和手机立即绑定

Vue开发者必懂的11个JavaScript基础知识

先从基础知识学起

随着人工智能和一些科技博主的兴起,在 JavaScript 领域似乎有很多人在使用框架之前忽略了基础知识。理解核心的 JavaScript 概念是至关重要的,就像学会走路才能跑一样。当我换工作需要熟练掌握 Vue 时,我花时间回顾了这些 JavaScript 知识,以便更有效地开发 Vue 3。我理解和使用 React,但这不是我的最爱框架,这又是另一个话题。以下是这些基础概念为何重要的几点:

变量和数据种类
  • 为什么这很重要: Vue 3 的响应式系统很大程度上依赖于正确的变量声明。
  • 要使用组合式 API,你需要理解 const 在 ref 和 reactive 对象中的应用。
  • 类型感知有助于 Vue 3 的模板渲染和属性验证过程。
const count = ref(0) // 定义了一个名为count的变量,初始值为0
const user = reactive({ // 定义了一个名为user的响应式对象
  name: 'John', // 名字为John
  age: 30 // 年龄为30岁
})

全屏,退出全屏

模板字面
  • 为什么这很重要:这对于 Vue3 模板表达式和字符串插值来说至关重要。
  • 它在计算的属性和方法中被广泛使用。
  • 因此,模板字符串对于动态组件模板和属性值非常有用。
    const greeting = computed(() => `你好, ${user.name} !`)

进入全屏,退出全屏

箭头函数是一种简洁的函数表达方式
  • 为什么它很重要:对于 Vue 3 的组合式 API 至关重要。
  • 用于 setup() 函数、计算的属性和监听器。
  • 对于在方法中保持正确的 this 绑定关系至关重要。
    const 双倍计数 = computed(() => count.value * 2)
    watch(() => user.name, (newValue, oldValue) => {
      console.log(`控制台显示:名字从${oldValue}改成了${newValue}`)
    })

进入全屏模式 退出全屏模式

对象和解构赋值
  • 为什么这很重要:在处理 Vue 的响应式对象时非常重要。
  • 在定义组件的 props 和 emits 时是必需的。
  • setup() 返回值中解构时也是必不可少的。
    export default {
      setup(props, { emit }) {
        // 定义了props中的title和description
        const { title, description } = props
        // 返回title和description
        return { title, description }
      }
    }

切换到全屏模式。退出全屏

数组和数组的操作方法
  • 为什么这很重要:对于用 v-for 渲染列表来说非常重要。
  • 非常关键于进行响应式数据操作。
  • 常用于计算属性中进行数据转换。
    <template>
      <ul>
        <li v-for="item in 过滤后的项目" :key="item.id">{{ item.name }}</li>
      </ul>
    </template>

    <script setup>
    // 定义一个包含项目的数据引用
    const 项目 = ref([/* ... */])
    // 计算过滤后的项目列表
    const 过滤后的项目 = computed(() => 
      项目.value.filter(item => item.isActive)
    )
    </script>

全屏/退出全屏

异步编程与Promise和Await
  • 为什么这很重要:在 setup() 中获取数据时非常重要。
  • 对异步组件操作来说必不可少。
  • 对生命周期钩子和侦听器来说非常重要。
    import { onMounted } from 'vue'
    export default {
      async setup() {
        const data = ref(null)

        onMounted(async () => {
          data.value = await fetchData()
        })
        return { data }
      }
    }

    // 代码未进行翻译,因为代码本身通常是不进行翻译的,以保持其功能的完整性。

全屏模式,退出全屏

模块与功能导出
  • 为什么这很重要:对组件的组织至关重要。
  • 可组合组件和插件所必需。
  • 保持架构清晰不可或缺。
    // useCounter.js
    import { ref } from 'vue'

    export function useCounter() {
      const count = ref(0)
      const increment = () => count.value++
      return { count, increment }
    }

    // Component.vue
    import { useCounter } from './useCounter'

    export default {
      setup() {
        const { count, increment } = useCounter()
        return { count, increment }
      }
    }

进入全屏模式,退出全屏模式

类和对象导向的思想
  • 为什么它很重要:对理解组件继承有帮助。
  • 在实现自定义指令时使用。
  • 在处理复杂状态管理时很有用。
class BaseComponent {
  constructor(名称) {
    this.名称 = 名称
  }

  sayHello() {
    console.log(`来自 ${this.名称} 的问候`);
  }
  // 基础组件类,用于定义基础组件的名称和问候方法
}

class SpecialComponent extends BaseComponent {
  constructor(名称, 特殊属性) {
    super(名称)
    this.特殊属性 = 特殊属性
  }
  // 特殊组件类,继承自基础组件,增加了特殊属性
}

切换到全屏模式,退出全屏

可选链
  • 为什么重要:在模板中进行安全的属性访问至关重要。
  • 在计算属性中非常有用。
  • 对处理异步数据状态很有帮助。
    <template>
      <div>{{ user?.profile?.name }}</div>
    </template>

    <script setup>
    // 用户名的计算逻辑
    const user = ref(null)
    const userName = computed(() => user.value?.profile?.name ?? 'Guest')
    </script>

进入全屏模式 退出全屏

处理事件
  • 为什么这很重要:对于组件间通信非常重要。
  • 用于管理DOM事件。
  • 对于实现自定义事件必不可少。
    <template>
      <button @click="handleClick">点击我</button>
    </template>

    <script setup>
    import { defineEmits } from 'vue'
    const emit = defineEmits(['自定义事件名'])

    function handleClick() {
      emit('自定义事件名', { data: '某些数据' })
    }
    </script>

进入全屏 退出全屏

处理错误
  • 为什么这很重要:这很重要,因为它对于组件的错误边界很重要。
  • 对于API调用和异步操作来说,这至关重要。
  • 维护应用稳定性是必不可少的。
    import { onErrorCaptured } from 'vue' // 从vue导入错误捕获函数

    export default {
      setup() {
        onErrorCaptured((error, instance, info) => {
          console.error('捕获到错误:', error, instance, info)
          // 处理错误或向后端报告
          return false // 阻止错误进一步传播
        })

        async function fetchData() {
          try {
            const response = await api.getData() // 获取数据
            // 处理接收到的数据
          } catch (error) {
            console.error('获取数据失败:', error)
            // 处理错误(例如,向用户展示友好的提示)
          }
        }

        return { fetchData }
      }
    }

全屏查看,退出全屏

这些代码片段展示了每个概念在 Vue 3 开发中的实际应用场景,为开发人员提供了理解并应用这些基本 JavaScript 技能的具体实例。

实际应用的 JavaScript 核心概念

图片

为了展示这些JavaScript的重要概念如何在常见的初学者场景中使用,让我们通过三个小项目来探讨:一个天气应用、一个背景颜色切换器和一个待办事项列表。这些例子将展示我们在前面讨论的概念的实际应用。

天气app
    const apiKey = 'YOUR_API_KEY';
    const cityInput = document.getElementById('cityInput');
    const getWeatherBtn = document.getElementById('getWeatherBtn');
    const weatherInfo = document.getElementById('weatherInfo');

    // 异步函数声明
    async function getWeather(city) {
      try {
        // API调用的异步/等待
        const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`);
        // 解析JSON的异步/等待
        const data = await response.json();

        // 模板字符串
        // 更新DOM
        weatherInfo.innerHTML = `
          <h2>${data.name}</h2>
          <p>温度: ${data.main.temp}°C</p>
          <p>天气状况: ${data.weather[0].description}</p>
        `;
      } catch (error) {
        // 获取失败:
        console.error('获取失败:', error);
        weatherInfo.innerHTML = '<p>获取天气信息失败了,请稍后再试。</p>';
      }
    }

    // 事件监听器
    getWeatherBtn.addEventListener('click', () => getWeather(cityInput.value));

进入全屏,退出全屏

本文实现的核心概念包括:

  • 异步/Await:用于处理异步API调用。
  • Fetch API:用于从外部服务获取天气数据。
  • DOM 更新:动态更新HTML内容。
  • 模板字符串:用于方便的字符串插值和多行字符串。
  • 错误处理:使用try/catch来捕获和处理fetch操作中的潜在错误。

……

背景颜色更换器
    const colorBtn = document.getElementById('colorBtn');
    const colorDisplay = document.getElementById('colorDisplay');

    // 箭头函数(ES6新增)
    const generateRandomColor = () => {
      // 生成随机颜色
      const r = Math.floor(Math.random() * 256);
      const g = Math.floor(Math.random() * 256);
      const b = Math.floor(Math.random() * 256);
      // 模板字面量
      return `rgb(${r}, ${g}, ${b})`;
    };

    // 点击事件监听器
    colorBtn.addEventListener('click', () => {
      const newColor = generateRandomColor();
      // DOM 更新
      document.body.style.backgroundColor = newColor;
      colorDisplay.textContent = newColor;
    });

全屏模式,退出全屏

主要概念:

  • 箭头函数:用于简洁的函数表达式。
  • Math 对象:生成随机的 RGB 值。
  • 模板字符串:用于构造 RGB 字符串。
  • 事件监听器:处理用户交互(如按钮点击)。
  • DOM 操作:改变背景颜色并显示当前颜色。

    • *
      此处为分隔符
Todo应用
    const todoForm = document.getElementById('todoForm');
    const todoInput = document.getElementById('todoInput');
    const todoList = document.getElementById('todoList');

    // Local storage usage
    let todos = JSON.parse(localStorage.getItem('todos')) || [];

    // Arrow function
    const renderTodos = () => {
      // Array method (map)
      // 模板字面量
      todoList.innerHTML = todos.map((todo, index) => `
        <li>
          ${todo}
          <button onclick="removeTodo(${index})">删除事项</button>
        </li>
      `).join('');
    };

    // 事件处理函数
    function addTodo(e) {
      e.preventDefault();
      // 获取输入框值并去除首尾空白
      const newTodo = todoInput.value.trim();
      if (newTodo) {
        // Array method (push)
        todos.push(newTodo);
        // Local storage
        localStorage.setItem('todos', JSON.stringify(todos));
        todoInput.value = '';
        renderTodos();
      }
    }

    // Array处理
    function removeTodo(index) {
      // Array方法(splice())
      todos.splice(index, 1);
      // Local storage
      localStorage.setItem('todos', JSON.stringify(todos));
      renderTodos();
    }

    // 事件监听
    todoForm.addEventListener('submit', addTodo);
    // 渲染待办列表
    renderTodos();

点击这里进入全屏,点击这里退出全屏

以下是一些核心概念的实现:

  • 本地存储:用于持久化待办事项,使其跨会话保留。
  • 数组方法:使用 map 渲染待办事项列表,并使用 push/splice 来修改待办事项列表。
  • 箭头函数:用于函数的简洁语法。
  • 事件处理:处理表单提交和按钮点击事件。
  • 模板字符串:用于动态生成 HTML 标签。

    • *

这些迷你项目展示了核心的JavaScript概念如何在实际应用中融为一体。它们包括异步编程、DOM操作、事件处理、数组方法等,提供了理解上述核心JavaScript技能的具体上下文,从而在进入Vue3.js开发之前更好地掌握这些技能。

全屏,退出全屏

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消