如何解决 React 中组件传递方法链路很长的问题?

2021-07-14 15:16:26 +08:00
 xrr2016

一个组件 A 的方法通过 props 传递到组件 B 然后到组件 C 再到 D 再到 E...

这样的写法找起来真是痛苦啊,所以如何解决这种问题呢?

网上搜了一圈没找到方案,所以来问下哈哈哈

3050 次点击
所在节点    React
31 条回复
frankwei777
2021-07-14 19:57:58 +08:00
有大佬讲下 context 有什么坑吗 写了 2 年 react 都没咋用过
Hanggi
2021-07-14 20:43:55 +08:00
redux 有点啰嗦,竟然没有人提 Recoil 。
fantastic
2021-07-14 22:00:26 +08:00
Dva 走起
zinete
2021-07-14 22:15:40 +08:00
mobx 走起
Rocketer
2021-07-15 06:00:52 +08:00
别给新人推荐 redux 了,真的太重了,无论开发速度还是运行速度都慢。context 足够 99%的正常使用了,新人一般没机会遇上那 1%的坑。
rioshikelong121
2021-07-15 08:58:58 +08:00
这种现象叫 Prop Drilling, 指的是在组件树中,父组件不得不往下传递某些 props 给子组件,但是其本身并不需要使用这些 props 的行为。
1. 使用 Context,Redux 等。不要使用 Legacy 的 Context API 。
2. 改善组件设计,避免多早的把 Render 逻辑拆分为 Component(这会导致 Drilling 程度的加重),直到需要复用,再进行拆分。
3. 使用 Compound Component Pattern 等方式来进行组件设计,也可以避免这种情况。

什么是 Compund Component Pattern 呢,参考下面的代码形式:

```jsx

import React from "react";
import { Counter } from "./Counter";

function Usage() {
const handleChangeCounter = (count) => {
console.log("count", count);
};

return (
<Counter onChange={handleChangeCounter}>
<Counter.Decrement icon="minus" />
<Counter.Label>Counter</Counter.Label>
<Counter.Count max={10} />
<Counter.Increment icon="plus" />
</Counter>
);
}

export { Usage };

```
TrickWu
2021-07-15 09:44:09 +08:00
可以试试状态管理器 hox
用 hook 很方便
ruoxie
2021-07-15 09:49:06 +08:00
楼上 hox +1,用了一年多了,很舒适
netwjx
2021-07-15 11:38:35 +08:00
全局变量系列: redux, pub/sub, 普通模块
上下文系列: context, npm: local thread

排名不分先后
xutao881
2021-07-15 12:58:14 +08:00
之前写购物车的时候,一开始没上 redux,然后全选 商家选择 商品选择传递勾选状态变更,好家伙给我累的
mandoon
2021-07-16 05:34:06 +08:00
context 放在逻辑层,ui 组件不要被污染就行

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

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

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

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

© 2021 V2EX