拡張系atomでgetterが欲しい場合にどうするか
タイトル直す↑mrsekut.icon
まとめる↓mrsekut.icon
docsにそれぽいのがあった
一旦別の方法で解決して課題感がなくなったので保留
code:使用例.ts
const priceAtom = atom(10)
code:使用例.ts
const readOnlyAtom = atom((get) => get(priceAtom) * 2)
そうすると、別のatomに依存する初期値を持つようなatomWithResetは定義できない?ということになる
しかし、こういう動機はいくらでもあるはずだが、サポートしていないということは何かしら組み合わせで対処できるはず
これを統一的に扱える書き方がわかれば色々解決する
例えばこんな感じ
code:ts
const bAtom = atom(true);
const aAtom = atom(get => {
const b = get(bAtom);
if (b) {
return atomWithReset(1);
} else {
return atomWithReset(2);
}
});
しかし、aAtomはatom in atomになってしまう
こうか?
code:ts
const aAtom = atom(get => {
const b = get(bAtom);
if (b) {
return get(atomWithReset(1));
} else {
return get(atomWithReset(2));
}
});
atomWithReset知らんので適当に書いてる
setterいけるか?
こうもかける
code:ts
const bAtom = atom(true);
const r1 = atomWithReset(1);
const r2 = atomWithReset(2);
const aAtom = atom(
get => {
const b = get(bAtom);
if (b) {
return get(r1);
} else {
return get(r2);
}
},
(get, set, args: number) => {
set(r1, args);
set(r2, args);
},
);
1個しか使わないのに、分岐の数だけatomを用意するのも馬鹿らしい
flatするような機構だったり、別の書き方で同じようなことを実現したりできないか
仮に無理なのだとしたら、拡張atom系は、atomWithResetみたいに拡張atomを提供するのではなく、getter/setter用の関数を提供したほうが良いのではないか
Discussionで聞いてみると良さそう
活発そうだし