小编nom*_*oda的帖子

Vue.js:Nuxt错误处理

苦苦挣扎以使用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

  • 嗯.

缺点

  • 错误未处理并存储在vuex中.
  • 在组件方法中引入了大量的样板代码.

备选方案2 - 在vuex中捕获和处理错误

pages/login.vue中:

export default {
    methods: {
        onLogin() {
            this.$store.dispatch('auth/login', { …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vuex vuejs2 nuxt.js

20
推荐指数
2
解决办法
5238
查看次数

Cloud Firestore下一代云数据存储?

我发现Google提供的有关我应该为我的网络应用使用哪种数据存储解决方案的信息有些矛盾.由于我对使用Mobile SDK并且对Cloud Datastore提供的服务器框架不太感兴趣,我会根据此流程图选择该选项.

Google存储选项流程图

但是,当我进入我的Google Cloud Platform并从菜单中选择Cloud Datastore选项时,我收到以下消息:

云Firestore

它提出了很多问题和困惑.这是否意味着Cloud Firestore最终会取代Cloud Datastore?Cloud Datastore的好处是否会在Firestore中实现?我应该避免在我的网络应用中使用Cloud Datastore吗?

datastore firebase google-cloud-datastore google-cloud-firestore

8
推荐指数
2
解决办法
1628
查看次数

GraphQL:嵌套查询与根查询

我在我的服务器上使用 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 查询的推荐方法是什么?

apollo graphql

7
推荐指数
1
解决办法
3688
查看次数

配置 Babel 和 Jest

TLDR:我如何配置jest,以便它使用babel编译测试文件,并在需要的所有文件globalSetupglobalTeardown


我一直在努力配置jestbabel. 似乎当我运行我的测试时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)

node.js jestjs babeljs babel-jest

6
推荐指数
1
解决办法
1万
查看次数

打字稿装饰器 + 反映元数据

我正在使用一个属性装饰器Field,它将它的键推送到一个fieldsReflect 元数据属性:

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)

typescript reflect-metadata

5
推荐指数
1
解决办法
3751
查看次数

使用#selector传递参数

我是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)

parameter-passing notificationcenter swift

4
推荐指数
1
解决办法
2254
查看次数

在UISearchController iOS 11上使用背景图片

我正在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)

uinavigationcontroller swift uisearchcontroller

4
推荐指数
1
解决办法
868
查看次数

多个监听者实现同一个承诺

我有一个带有异步函数的模块,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)

javascript

4
推荐指数
1
解决办法
786
查看次数

Nuxt.js:从 vuex 开始加载指示器

根据文档,有一种方法可以在组件中手动启动 nuxt 加载指示器,如下所示:

export default {
    methods: {
        startLoading() {
            this.$root.$loading.start();
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从 vuex 动作切换加载器?如何$root从 vuex 操作访问对象?

vue.js vuex nuxt.js

3
推荐指数
1
解决办法
3789
查看次数