- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
提供的 Component.vue 是一个更大的 Web 应用程序的一部分,因此我删除了这个问题的相关代码。我没有注意到的是,我在删除代码时所做的一个非常微小的更改产生了很大的影响。
两者之间有区别:
mounted() {
// ....
}
和:
mounted: () => {
// ....
}
今天早上经过仔细调查,我在代码中发现了这个错误,并且我更新了问题以反射(reflect)失败的实际代码。
我可能只是累了,但在 sleep 之前我想在这里寻求帮助,看看是否有人能找到我的问题。我有一个非常简单的 Vue 组件无法正常工作:
组件.vue:
<template>
<div>
<p v-for="item in items">{{ item.text }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: []
};
},
mounted: () => {
var _this = this;
$.ajax("/items.json").done(result => {
_this.items = result;
});
}
};
</script>
items.json
[
{"text": "ABC"},
{"text": "XYZ"}
]
这些段落永远不会呈现。经检查,在 AJAX 处理程序中设置 _this.items
之前,它似乎不存在(我希望它是一个空数组),并且 _this.$data
也是如此不存在
~mounted 方法中的 this
值与 Vue 中其他地方的值不同吗?~ 还是我犯了一个简单的错误?
以这种方式(使用冒号)编写 mounted
函数会导致 this
的值不同。这是为什么?
最佳答案
经过进一步的研究,我了解到普通函数和箭头函数之间的细微差别。我之前认为后者只是一种简写,但它也没有自己的上下文。
方法 mounted: () => {}
使用箭头函数,因此
...does not have its own
this
,arguments
,super
, ornew.target
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
这是一个简单的示例,演示了可以在 Chrome 控制台中测试的差异
let testFunc = function() { console.log(this); }
testFunc(); // Window {...}
testFunc.bind("test")(); // String {"test"}
testFunc = () => { console.log(this); }
testFunc(); // Window {...}
testFunc.bind("test")(); // Window {...}
使用箭头函数时,无法将值绑定(bind)到 this
。这意味着在 Vue 内部,他们无法将 Vue 实例绑定(bind)到 this
。
方法 mounted() { }
仅利用对象的 ES6 简写,而不是箭头函数(因此它确实有自己的上下文,您可以使用可以绑定(bind)this
变量)
关于javascript - 简单的VueJS问题(在mounted中设置$data),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533472/
我想在Rust FFI中使用'nix'库替换为'libc'。 我想使用nix::mount::mount()替换为libc::mount()。现在我有以下代码: libc::mount(ptr::nu
我正在使用React最新版本,当单击运行expandMenu()的按钮时,我收到以下错误 这里跟踪生命周期: constructor componentWillMount render compone
当我尝试通过命令行挂载目录“test_mount”时,操作成功: mount -t nfs4 remote_server_ip:/ local_dir 但我无法以编程方式挂载同一目录: int re
我有一个在外网运行的 kubernetes 集群,并在同一网络的另一台机器上设置了 NFS 服务器。我可以通过 ssh 连接到集群中的任何节点并通过运行 sudo mount -t nfs 10.17
这是我的组件: var booksRef = new Firebase("https://bookshelf.firebaseio.com/books"); class BookShelf exten
这是完整的错误: index.js:2177 Warning: Can only update a mounted or mounting component. This usually means
我想使用 C++ 挂载文件系统。我应该使用 mount() 系统调用,还是只执行 mount 二进制文件? 显然,系统调用会更快,我会花更少的时间构建命令行参数和解析错误消息等。但是,在阅读 moun
我正在尝试按照本教程进行操作:https://ivrodriguez.com/installing-self-signed-certificates-on-android/ 当我到达尝试将 /syst
我正在尝试按照本教程进行操作:https://ivrodriguez.com/installing-self-signed-certificates-on-android/ 当我到达尝试将 /syst
理论上,我应该能够异步获取一些数据并更新 componentDidMount 内的组件。这是我的组件: import React, { Component } from 'react' import
在使用 react-router 的辅助组件中时,我收到 setState 错误。任何人都可以看到我的代码中的任何问题吗? import React, { Component } from 'reac
我有 2 个组件,我通过使用 react router dom 中的 Route 组件在它们之间进行路由。其中一个组件在 componentDidMount 事件(使用 axios 包)上从虚拟 AP
我无法摆脱这个错误。当我从数组中删除一项并更新状态时,就会发生这种情况。 经过一些调试,我发现如果我重新加载应用程序,直接进入这个屏幕并删除,错误不会显示。但是,如果我导航到此屏幕,返回,然后再次转到
我尝试了 stackoverflow 和在线提供的所有命令和建议,但都没有用 https://stackoverflow.com/a/13366444/1441666 https://stackove
我有一个 RN 应用,在安装组件(“收藏夹”屏幕)时,我会从 Firebase 读取数据,并将其设置为收藏夹组件随后渲染的状态。 但是当我在另一个屏幕上并将项目添加到 firebase 中的收藏夹数据
我有一个使用 React Router 的应用程序。该应用程序有一些不断更新的组件(它是实时分析数据的仪表板)。我在使用 时遇到以下错误链接仪表板的各个部分: warning.js:36 Warni
我在 componentDidMount() 方法中使用 fetch(url, ...) 在 React Native 中获取数据。 所以我的类(class)看起来像 class Posts exte
相关问题here但我不确定如何使解决方案适应这个问题。 我正在尝试为带有选项卡的登录页面创建一个可重用的组件。每个选项卡都是可重用组件的子项,并且有自己的存储定义为 Prop :
我正在整理一个小 POC,其中一部分用于执行搜索功能。这个想法是“搜索”将负责以下事情: - 显示搜索输入表单(例如,文本、日期和位置参数) - 命中后端 AWS Lambda 搜索 API - 将结
我收到此错误setState(...):只能更新已安装或正在安装的组件。但我不知道如何修复它。 import React, { Component } from 'react'; import Loa
我是一名优秀的程序员,十分优秀!