React 有什么比较优雅的跨组件通信方法吗

2022-02-16 21:25:27 +08:00
 charlesliu
在 A 组件上推送了某个消息,可以让不同级的组件 B 监听,并执行相应的任务。

我首先想到了使用 Context ,保存一个变量,A 改变这个变量,B 使用 useEffect 监听变化。

或者是使用 hox.js

或者是使用 浏览器的 CustomEvent 。

上述感觉都不够优雅
5449 次点击
所在节点    React
37 条回复
WildCat
2022-02-16 21:42:33 +08:00
Redux?
tatu
2022-02-16 21:43:34 +08:00
rxjs?
seki
2022-02-16 21:43:56 +08:00
思路很多,比如
+ 加一个 event emitter
+ 加入 store
+ rxjs

就看你为什么会觉得不优雅了
ddiu8081
2022-02-16 22:17:55 +08:00
Recoil? A 组件 set ,B 组件 useValve
rrfeng
2022-02-16 22:21:23 +08:00
这时候 angular 的方便就体现出来了!可以直接通过 service 发布 /订阅 事件,跨多远都没关系。
hanai
2022-02-16 22:42:18 +08:00
event bus
postMessage
Rocketer
2022-02-16 23:00:00 +08:00
angular 是用 rxjs 实现的,你也可以在 react 里使用 rxjs 。只是 angular 全面使用 rxjs 而 react 会有很多 promise ,混着写算不算另一种不优雅?
theohateonion
2022-02-16 23:04:30 +08:00
为什么不够优雅呢?你觉得优雅的方式是什么呢? Context + useEffect 就是一个简单的 pubsub ,不过缺乏统一的地方去管理这些订阅,可能是个问题。
solos
2022-02-16 23:04:42 +08:00
@rrfeng angular 真香
Leviathann
2022-02-16 23:07:15 +08:00
react 比较推崇单向数据流 单一信源
所以就弄个 store
sweetcola
2022-02-17 00:10:16 +08:00
可能你是觉得都用到了 Context (要写 Provider )不够优雅吗?

看看 https://www.npmjs.com/package/react-signal-slot 这个符不符合你的想法,就是个不用写 Provider 的 event bus
dayeye2006199
2022-02-17 07:01:46 +08:00
context 不用引入额外依赖,多好
xsen
2022-02-17 07:06:44 +08:00
封装个 event bus ,这样不管是 react 组件、还是纯 js/ts 模块,都可以双向通讯
跨 ui 框架了,还可以服用
fliu2476
2022-02-17 08:59:49 +08:00
zustand 香的不行
fancy2020
2022-02-17 09:16:14 +08:00
redux?
gouflv
2022-02-17 09:17:27 +08:00
提问前,请先自己定义好什么样叫优雅
boxz
2022-02-17 09:23:40 +08:00
jotai
Latin
2022-02-17 09:28:16 +08:00
useContext or Redux
karott7
2022-02-17 09:59:33 +08:00
Redux 就好了
ChefIsAwesome
2022-02-17 10:01:18 +08:00
有一种“优雅”是必须用一个技术栈内的方案解决问题。
另外一种“优雅”是融会贯通,跳出当前技术栈,从更广的范围内,找到最简单的方案解决问题。
明显你这就是个常规小问题,怎么解决还不是看你心情。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX