Skip to content

感谢 repo, 三个问题 #7

Answered by runjuu
HaveF asked this question in Q&A
May 21, 2021 · 1 comments · 2 replies
Discussion options

You must be logged in to vote

1. 关于 reaction$

没错,在大部分情况下是可以进行互换的。reaction$实际代码中只是对 reaction 的一个简单封装。

它们的区别只有两个:一个是最终“流”出来的值,reaction$ 多加了一层封装,而 toStream 则是直接返回了对应的值;另一个是 reaction$ 会多一些 options, 而 toStream 只有 fireImmediately

mst-effect 提供 reaction$ 的本意是填补这方面的空白。如果项目中已经用到 mobx-utils 了的话,直接用 toStream 也没什么问题的,而且 reaction 额外支持的一些 options 其实在 RxJS 里面也非常容易实现。

2. 关于 action 的一些疑问

是指能写成这样吗?

...
 .actions((self) => ({
    setValue(value: string) {
      self.value = value
    },
    fetch: effect<string>(self, (payload$) => {
      return payload$.pipe(
        switchMap((url) => fetch$(url)),
        map((value) => action(self.setValue, value)),
      )
    }),
  }))
...

理论上是没问题的,但如果是用 TS 写的话,类型系统会抱怨说没有 self.setValue。需要改成这样:

.…

Replies: 1 comment 2 replies

Comment options

You must be logged in to vote
2 replies
@HaveF
Comment options

@idfunctor
Comment options

Answer selected by HaveF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants
Converted from issue

This discussion was converted from issue #6 on May 21, 2021 05:04.