44 条回复  ·  1010 次点击
xitler 小成 2024-4-15 10:57:18
状态提升,入门教程不是都有吗
nzbin 小成 2024-4-15 13:50:06
@ymcz852 在 angular 中最简单的方式就是通过 service 共享状态,本质就是 DI + rxjs
xwwsxp 小成 2024-4-15 13:56:38
https://easy-peasy.dev/ 如果会 Vue ,直接使用这个组件库
douxc 小成 2024-4-15 16:29:40
如果只是父子的话,父组件用 useReducer ,把 dispatch 传给子组件
GeekGao 小成 2024-4-15 16:36:30
全局状态用 Jotai 库管理即可
myl0204 小成 2024-4-15 16:37:36
很多人说到了,状态提升。

“我想在 toolbar 中的一个 button 点击事件中获取 Grid 控件的值”

可以了解下受控组件的概念: https://react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components
ZGame 初学 2024-4-15 16:55:29
是我的话我可能会提 5 个 gridRef 出来, gridRef.getRow?.[0],比较符合直觉
RRRSSS 小成 2024-4-15 17:19:04
一定不要一层一层传,根本难以维护,更没有意义,这么多层写出来的一定是冗余代码。

想要在 Grid 和 Page 之间状态共享,使用 zustand / jotai / redux 这种全局状态库就行了,写出来代码都差不多(这里以 jotai 为例):

// 定义 atom
export const dataAtom = atom('')

// Grid ,想要使用 `data` 或 设置 `data` 值都可以
const [data, setDataA] = useAtom(dataAtom)

// 同理在 Page 也是一样的:
const [data, setDataA] = useAtom(dataAtom)

这样写,省去了一层一层的 props ,代码简单多了。更重要的是:你只要知道你在组件里需要什么 atom ,然后使用就行了,没有心智负担。hook 本来就是干这事的。

另外,这样的需求,不建议使用 context 。实际上,我在任何情况下都不建议别人使用 context 来做业务代码,context 最常见的是场景其实是封装组件。
ivslyyy 小成 2024-4-15 18:08:30
自定义一个 hooks ,在其中用 useState ,
可以在其他组件中使用 hook ,
madao199 小成 2024-4-15 19:10:16
可以用 ref useimperativehandle 把组件的状态暴露出来 向下渗透 ref 也能拿到值
返回顶部