苦苦挣扎以使用vuex设置错误处理.似乎有很多方法可以做到这一点,并且很少有关于正确错误处理的文档.我一直在尝试四种替代方案,但我还没有找到令人满意的解决方案.
备选方案1 - 捕获和处理组件上的错误
在 pages/login.vue中:
export default {
methods: {
onLogin() {
this.$store.dispatch('auth/login', {
email: this.email,
password: this.password,
}).then(() => {
this.$router.push('/home');
}).catch((error) {
// handle error in component
});
},
},
}
Run Code Online (Sandbox Code Playgroud)
在 store/auth.js中:
export const actions = {
login({ commit }, { email, password }) {
return this.$axios.post('/api/login', {
email,
password,
}).then((res) => {
doSomething(res);
});
},
}
Run Code Online (Sandbox Code Playgroud)
PROS
缺点
备选方案2 - 在vuex中捕获和处理错误
在 pages/login.vue中:
export default {
methods: {
onLogin() {
this.$store.dispatch('auth/login', { …
Run Code Online (Sandbox Code Playgroud) 我发现Google提供的有关我应该为我的网络应用使用哪种数据存储解决方案的信息有些矛盾.由于我对使用Mobile SDK并且对Cloud Datastore提供的服务器框架不太感兴趣,我会根据此流程图选择该选项.
但是,当我进入我的Google Cloud Platform并从菜单中选择Cloud Datastore选项时,我收到以下消息:
它提出了很多问题和困惑.这是否意味着Cloud Firestore最终会取代Cloud Datastore?Cloud Datastore的好处是否会在Firestore中实现?我应该避免在我的网络应用中使用Cloud Datastore吗?
datastore firebase google-cloud-datastore google-cloud-firestore
我在我的服务器上使用 Apollo GraphQL,我正在尝试设计我的 GraphQL API。我遇到的一个问题是我是否应该更喜欢嵌套查询而不是根查询。
让我们在此示例中检查两者,其中当前用户me
有许多invitations
。
根查询
me {
id
name
}
invitations {
id
message
}
Run Code Online (Sandbox Code Playgroud)
invitations
为当前用户返回邀请的解析器。
嵌套查询
me {
id
name
invitations {
id
message
}
}
Run Code Online (Sandbox Code Playgroud)
除了me
使用后一种方法嵌套在用户对象中的邀请之外,这些应该实现相同的结果。我担心的是,如果这与 Apollo Client 顺利地工作以保持缓存一致。
设计 GraphQL 查询的推荐方法是什么?
TLDR:我如何配置jest
,以便它使用babel
编译测试文件,并在需要的所有文件globalSetup
和globalTeardown
?
我一直在努力配置jest
和babel
. 似乎当我运行我的测试时babel
无法加载配置文件,或者它根本没有运行。
在 package.json 中:
{
"scripts": {
"start": "babel-node src/index.js",
"test": "jest src/tests/*.test.js",
},
"devDependencies": {
"@babel/cli": "^7.0.0-rc.1",
"@babel/core": "^7.0.0-rc.1",
"@babel/node": "^7.0.0-rc.1",
"@babel/preset-env": "^7.0.0-rc.1",
"babel-jest": "^23.4.2",
"jest": "^23.5.0",
}
}
Run Code Online (Sandbox Code Playgroud)
在 babel.config.js 中:
module.exports = (api) => {
if (api) api.cache(true);
const presets = ['@babel/preset-env'];
const plugins = [];
return {
presets,
plugins,
};
};
Run Code Online (Sandbox Code Playgroud)
在 jest.config.js 中:
module.exports = { …
Run Code Online (Sandbox Code Playgroud) 我正在使用一个属性装饰器Field
,它将它的键推送到一个fields
Reflect 元数据属性:
export function Field(): PropertyDecorator {
return (target, key) => {
const fields = Reflect.getMetadata('fields', target) || [];
if (!fields.includes(key)) {
fields.push(key)
}
Reflect.defineMetadata('fields', fields, target)
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个抽象基类Form
,它访问 getter 附件中的元数据:
abstract class Form {
get fields() {
return Reflect.getMetadata('fields', this) || [];
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够成功地使用它来区分表单字段和其他类属性。考虑这些类:
abstract class UserForm extends Form {
@Field()
public firstName: string
@Field()
public lastName: string
get fullName() {
return this.firstName + ' ' + this.lastName;
}
}
class …
Run Code Online (Sandbox Code Playgroud) 我是Swift的初学者,正在尝试通过NotificationCenter初始化功能。“ ViewController.swift”中的观察者调用function reload
:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "reload"), object: nil)
}
func reload(target: Item) {
print(target.name)
print(target.iconName)
}
Run Code Online (Sandbox Code Playgroud)
...的参数为class Ítem
:
class Item: NSObject {
let name: String
let iconName: String
init(name: String, iconName: String) {
self.name = name
self.iconName = iconName
}
}
Run Code Online (Sandbox Code Playgroud)
该通知从“ menu.swift”发布:
class menu: UIView, UITableViewDelegate, UITableViewDataSource {
let items: [Item] = {
return [Item(name: "Johnny", iconName: "A"), Item(name: "Alexis", iconName: "B"), Item(name: "Steven", iconName: "C")]
}()
...
func …
Run Code Online (Sandbox Code Playgroud) 我正在UISearchController
为自己实现一个,UITableView
但我正在为iOS 11的自定义设置而苦苦挣扎。我的导航栏使用的是渐变图像背景,我希望搜索控制器能够匹配该渐变背景,但是我还没有找到一种设置背景图像的方法为UISearchController
。它可以作为TableHeaderView在UISearchController上完美运行,但是在iOS 11中几乎没有传递任何自定义设置。
当前结果:
期望的结果:
这是我正在使用的代码:( 在viewDidLoad上调用)
private func setupSearchController() {
let searchController = UISearchController(searchResultsController: nil)
// Convert CAGradientLayer to UIImage
let gradient = Color.blue.gradient
gradient.frame = searchController.searchBar.bounds
UIGraphicsBeginImageContext(gradient.bounds.size)
gradient.render(in: UIGraphicsGetCurrentContext()!)
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Setup the Search Controller
searchController.searchBar.backgroundImage = gradientImage
searchController.searchBar.isTranslucent = false
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search by transaction name"
searchController.searchBar.tintColor = Color.custom(hexString: "FAFAFA", alpha: 1).value
definesPresentationContext = true …
Run Code Online (Sandbox Code Playgroud) 我有一个带有异步函数的模块,init()
该函数被多次调用。但是,我只希望函数的效果init()
触发一次,任何后续调用都应该等待最初的承诺解决。
这是我当前的代码。此示例中的错误是,第二次init()
调用该函数时,由于脚本标记已经存在,因此会立即解决该问题。我想等待onload
第一次调用时创建的脚本的回调init()
。
let scriptExists = false;
// This function should only be called once
// Returns a mock script that calls onload after 1000ms
function addScript() {
const mockScript = {
onload: () => {}
};
setTimeout(() => mockScript.onload(), 1000);
return mockScript;
}
// Add script and wait for it to load
function init() {
return new Promise((resolve) => {
if (!scriptExists) {
const script = addScript();
scriptExists = true; …
Run Code Online (Sandbox Code Playgroud) 根据文档,有一种方法可以在组件中手动启动 nuxt 加载指示器,如下所示:
export default {
methods: {
startLoading() {
this.$root.$loading.start();
},
},
}
Run Code Online (Sandbox Code Playgroud)
有没有办法从 vuex 动作切换加载器?如何$root
从 vuex 操作访问对象?
javascript ×2
nuxt.js ×2
swift ×2
vue.js ×2
vuex ×2
apollo ×1
babel-jest ×1
babeljs ×1
datastore ×1
firebase ×1
graphql ×1
jestjs ×1
node.js ×1
typescript ×1
vuejs2 ×1