【Nuxt】外部モジュールのgetterへのアクセス方法

概要

外部モジュールのgetterへのアクセスができない!ということに遭遇したのでメモ。

解決策

getterに対して名前空間を指定する。 例えば、store/xxx.jsというモジュールのgetHogeというgetterにアクセスしたい場合は以下のようにする。

store.getters['login/isAuthenticated']

なんかキー指定であることやキーの中にもスラッシュが入っていたりしてしっくりこないけど。 (ドット区切りの記法で取得できる方がいれば教えていただきたいです)

参考

stackoverflow.com

【Vuex】[vuex] unknown action type: Xxx と言われたのでメモ

概要

VuexのmapActionsヘルパーを使った際に以下のエラーが出てきたのでメモ。

[vuex] unknown action type: Xxx

解決策

store/index.jsにactionに記載すればmapActionsが検出できる。ただ、この記事を読んでいる人が求めているのはそんなことではないだろう。 store/xxx.jsを作成して、、、みたいにファイル分割をしたいはずだ。 VuexのAPIドキュメントを見てみると以下の記載がある。

mapActions(namespace?: string, map: Array | Object): Object

第一引数がnullableな引数で名前空間を指定していて、第二引数でどんなactionをマッピングしたいかを宣言する。 私は、第一引数の名前空間を指定していなかったため今回のエラーが発生した。そのため以下のようにして対応をした。 (store/xxx.jsのXxxアクションを利用する場合)

...mapActions('xxx', [
  'Xxx',
]),

参考

mapActions

【vuex】Do not mutate vuex store state outside mutation handlersがでた

概要

以下のエラーが出たのでメモ。

Do not mutate vuex store state outside mutation handlers

解決方法

私はnuxtを使っているので純vuexではどうなのかわからないが、storeを管理しているエントリ部( store/index.js )の先頭で以下を記述する。

export const strict = false

参考

github.com

【python】NameError: name 'reduce' is not defined といわれた

概要

以下のエラーメッセージが出てきたためメモ。

NameError: name 'reduce' is not defined

解決策

functoolsにreduce関数が移動されたみたいなのでimportして使う。

from functools import reduce

参考

stackoverflow.com

【python】TypeError: 'float' object is not iterable といわれた

概要

以下のエラーが発生したためメモ。

TypeError: 'float' object is not iterable

解決策

list(1)やlist(1.0)のようなキャストが発生している場合に発生する。 以下のようにすればOK。

list([1])

【python】TypeError: Object of type 'map' is not JSON serializable といわれた

概要

以下のエラーが出たのでメモ。

TypeError: Object of type 'map' is not JSON serializable

解決策

pythonにおいてmapはジェネレータであるらしい。そのため、JSONシリアライズする場合はmapをlistに変換する必要があるので以下のようにする。

list(hoge)

# もしくは
from collections import OrderedDict
OrderedDict(weeds)

参考

stackoverflow.com

関数型プログラミング HOWTO — Python 3.6.5 ドキュメント

【python】TypeError: Object of type 'Decimal' is not JSON serializable と言われた

概要

以下のエラーが出てのでメモ。

TypeError: Object of type 'Decimal' is not JSON serializable

また、Qiiaにすでに解決記事を出している方がおり、私も丸コピなので基本的におなじことをしています。

ドキュメントに以下の記載があります。これを使用します。

default を指定する場合は関数を指定して、この関数はそれ以外では直列化できないオブジェクトに対して呼び出されます。 その関数は、オブジェクトを JSONエンコードできるバージョンにして返すか、さもなければ TypeError を送出しなければなりません。 指定しない場合は、 TypeError が送出されます。

直列化できないオブジェクトに対して呼び出される、つまりオブジェクトが配列であれば配列内の値に対して、2次元配列であれば配列内の配列内の値に対して有効になります。引数として値が渡されてくるので、その値がDecimal型であれば適切にキャストして返す、みたいにすれば良いです。

なんで自分でこんなことを書かないといけないかがわからないのですが、pythonにも都合があるのでしょう。。。 わかる方がいれば教えてください。

解決策

def decimal_default_proc(obj):
    from decimal import Decimal
    if isinstance(obj, Decimal):
        return float(obj)
    raise TypeError
print(json.dumps(value, default=decimal_default_proc))