刘勇虎的官方网站
网站内容包含大前端、服务器开发、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);