![]() | 1 WildCat 2022-02-16 21:42:33 +08:00 Redux? |
![]() | 2 tatu 2022-02-16 21:43:34 +08:00 rxjs? |
![]() | 3 seki 2022-02-16 21:43:56 +08:00 ![]() 思路很多,比如 + 加一个 event emitter + 加入 store + rxjs 就看你为什么会觉得不优雅了 |
![]() | 4 ddiu8081 2022-02-16 22:17:55 +08:00 via iPhone Recoil? A 组件 set ,B 组件 useValve |
![]() | 5 rrfeng 2022-02-16 22:21:23 +08:00 via Android ![]() 这时候 angular 的方便就体现出来了!可以直接通过 service 发布 /订阅 事件,跨多远都没关系。 |
![]() | 6 hanai 2022-02-1 22:42:18 +08:00 event bus postMessage |
![]() | 7 Rocketer 2022-02-16 23:00:00 +08:00 via iPhone angular 是用 rxjs 实现的,你也可以在 react 里使用 rxjs 。只是 angular 全面使用 rxjs 而 react 会有很多 promise ,混着写算不算另一种不优雅? |
![]() | 8 theohateonion 2022-02-16 23:04:30 +08:00 为什么不够优雅呢?你觉得优雅的方式是什么呢? Context + useEffect 就是一个简单的 pubsub ,不过缺乏统一的地方去管理这些订阅,可能是个问题。 |
10 Leviathann 2022-02-16 23:07:15 +08:00 react 比较推崇单向数据流 单一信源 所以就弄个 store |
![]() | 11 sweetcola 2022-02-17 00:10:16 +08:00 可能你是觉得都用到了 Context (要写 Provider )不够优雅吗? 看看 https://www.npmjs.com/package/react-signal-slot 这个符不符合你的想法,就是个不用写 Provider 的 event bus |
12 dayeye2006199 2022-02-17 07:01:46 +08:00 context 不用引入额外依赖,多好 |
13 xsen 2022-02-17 07:06:44 +08:00 封装个 event bus ,这样不管是 react 组件、还是纯 js/ts 模块,都可以双向通讯 跨 ui 框架了,还可以服用 |
![]() | 14 fliu2476 2022-02-17 08:59:49 +08:00 zustand 香的不行 |
15 fancy2020 2022-02-17 09:16:14 +08:00 redux? |
![]() | 16 gouflv 2022-02-17 09:17:27 +08:00 via iPhone 提问前,请先自己定义好什么样叫优雅 |
![]() | 17 boxz 2022-02-17 09:23:40 +08:00 jotai |
![]() | 18 Latin 2022-02-17 09:28:16 +08:00 useContext or Redux |
![]() | 19 karott7 2022-02-17 09:59:33 +08:00 Redux 就好了 |
![]() | 20 ChefIsAwesome 2022-02-17 10:01:18 +08:00 有一种“优雅”是必须用一个技术栈内的方案解决问题。 另外一种“优雅”是融会贯通,跳出当前技术栈,从更广的范围内,找到最简单的方案解决问题。 明显你这就是个常规小问题,怎么解决还不是看你心情。 |
![]() | 21 Hanggi 2022-02-17 10:11:34 +08:00 有人提到 Angular , 确实在有大量数据操作的场景里,Angular 很简单很方便。 跨组件状态共享,最传统的方法就是引入 Redux ,但是需要一点学习成本,且代码量会变多不少。好处就 i 是熟悉了之后可以进行统一的状态管理。 个人比较推荐 Recoil ,使用起来非常简单高效,而且性能也很好。 |
22 CodingNaux 2022-02-17 10:13:53 +08:00 既然是消息,那就使用订阅发布吧,custom event 之类可以呀,如果是一个简单的页面,怎么简单怎么来 不是什么数据都要放 redux ,也不是什么情况都需要 redux rxjs 有点成本 |
23 einq7 2022-02-17 10:14:05 +08:00 useContext 结合 useReducer |
![]() | 24 nanxiaobei 2022-02-17 10:52:33 +08:00 |
25 charlesliu OP 这确实是一个很小的 case ,不过也是因为小,就没有什么比较统一的方案,就感觉自己的实现方法不够简洁、通用,所以才来 v 站上咨询一下,开阔视野。 如果是我个人的话,我也倾向于使用 rxjs ,不过在公司项目中这样使用,不见得引入它是个好的选择。 感谢各位回答 |
26 charlie21 2022-02-17 11:22:51 +08:00 useEffect 官网示例 开销最小做法 https://zh-hans.reactjs.org/docs/hooks-effect.html 关于何为优雅 https://www.zhihu.com/question/47161776/answer/111488644#人们怎么编程: 先为对应的问题建立一个模型, 然后用代码设计出一套 DSL, 再将代码进行运算以解决问题。也就是 越符合你自己在脑海之中建立的模型,你就会觉得越优雅。这是你一个人的事,而这往往和你自己对问题的定义有关,而和问题的实际规模无关。相比优雅,对别人以优雅之名给杀鸡人推荐杀牛刀的警惕是更必要的 |
27 AyaseEri 2022-02-17 14:10:31 +08:00 dispatchEvent addEventListener |
![]() | 28 Incrus 2022-02-17 15:43:44 +08:00 via iPhone Mobx |
29 star7th 2022-02-17 17:24:49 +08:00 强烈推荐 Mobx https://cn.mobx.js.org/ |
![]() | 30 freedomT 2022-02-17 17:48:42 +08:00 ![]() mitt |
![]() | 31 a935855375 2022-02-17 18:41:31 +08:00 Angular 通过 EventEmitter 。 可以搞个类似的 EventBus 服务 |
![]() | 32 linl1n 2022-02-17 18:47:08 +08:00 via iPhone 安利 Mobx |
![]() | 33 code4you 2022-02-17 19:03:40 +08:00 Mobx +1 |
![]() | 34 flashback313 2022-02-17 19:32:23 +08:00 Context 其实就是你要的答案,其他都是 pubsub 类 |
![]() | 35 2218675712 2022-02-17 20:00:35 +08:00 via Android concent.js |
36 mxT52CRuqR6o5 2022-02-17 20:57:50 +08:00 如果是希望减少外部依赖的话,那就 context 或者 props 硬传 |
37 Cbdy 2022-02-17 21:01:00 +08:00 document.dispatchEvent |