刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
目录:
设置反向代理(proxy)
vue.config.js 中配置 devServer.proxy 是开发阶段解决跨域问题的有效方法。/priceParList 是请求路径前缀,会自动匹配到目标服务器地址 http://localhost:3000。设置反向代理失败
/api 不会匹配到 http://localhost/api,除非明确指定)。secure: false。Vue Router 传参
params 和 query 只能传递基本类型数据(字符串、数字等),如果需要传递对象,可以先使用 JSON.stringify() 序列化,再在接收方用 JSON.parse() 还原。Vue CLI 怎么兼容 ES6+
targets.browsers: 指定目标浏览器范围。useBuiltIns: 控制 polyfill 引入方式,推荐使用 'usage' 以减少冗余代码。corejs: 推荐使用版本 3,因为它更全面且模块化更好。转译 node_modules 中的代码
transpileDependencies 配置来强制编译这些包。['some-es6-library'] 或 /node_modules\/some-es6-library/打包导出项分析
__webpack_require__.d(),这是用于定义 exports 的函数。export 语句。问题描述
解决方案
node-polyfill-webpack-plugin 插件,并在 vue.config.js 中引入该插件。defineConfig 来确保类型安全和更好的 IDE 支持。背景
$listeners,所有事件监听器都被整合到 vnode.props 中。替代方案
vnode.props 属性来判断某个事件是否存在并触发自定义逻辑。instanceRef.value.$parent.$.vnode.props.onSearchAction 来检测事件是否存在。问题
watch 中使用 JSON.stringify 判断对象变化时,若对象层级较深,可能无法准确识别变更。解决方案
{ deep: true } 配置选项,使 watch 监听深层变化。示例
const state = reactive({ count: 0 });
watch(
() => state,
(newValue, oldValue) => {
// newValue === oldValue
},
{ deep: true }
);
问题描述
Uncaught TypeError: assign is not a function,通常发生在引入某些依赖时。解决方案
external 配置排除重复引入。问题
toRaw 会返回原始对象,但会丢失响应性。若在计算属性中使用它处理 props,则可能导致更新失效。解决方案
cloneDeep 替代 toRaw,确保保留响应性的同时操作副本数据。示例
const paginationState = computed(() => {
const pagination = cloneDeep(props.pagination) as any;
if (pagination.size <= 0) {
delete pagination.size;
}
return {
...defaultPagination(),
...pagination,
};
});
问题
v-for 渲染响应式数据时,若直接修改数组索引或 length,Vue 无法检测到变化。解决方案
push, pop, splice)来修改数组。Vue.set 显式通知 Vue 数据变化。示例
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
// 正确做法
items.push(newItem);
// 或
Vue.set(items, index, newItem);