Javascript 将子组件连接到存储与将父组件连接到存储并传递道具
经过大量搜索并使用React和React Native。我对这件事的看法仍然很模糊 在什么情况下最好使用Javascript 将子组件连接到存储与将父组件连接到存储并传递道具,javascript,reactjs,react-native,react-redux,Javascript,Reactjs,React Native,React Redux,经过大量搜索并使用React和React Native。我对这件事的看法仍然很模糊 在什么情况下最好使用 将父组件连接到存储并将所有数据作为道具传递给子功能组件。我最初的想法是“反应”方式,但很快我就发现,随着应用程序的增长,父组件处理的逻辑量开始变得太大和混乱。子组件也开始有自己的子组件,等等 具有功能性的父组件(Screen),并且需要商店信息的每个子组件都将连接到该组件。这是一个更为“干净”的解决方案,但会产生大量不必要的存储连接“重复” 使用Redux存储 一般来说,我的问题是推荐使用哪
Screen
),并且需要商店信息的每个子组件都将连接到该组件。这是一个更为“干净”的解决方案,但会产生大量不必要的存储连接“重复”一般来说,我的问题是推荐使用哪种模式,以及在哪些用例中,如果能知道大量连接(容器)组件的价格,我会很高兴的我不确定我能为这个问题提供正确或错误的答案,因为每个都有其优缺点。
我的经验法则是,只有当它们的父组件是“道具的代理”时,才连接深度嵌套的组件。也就是说,他们接受道具只是为了把道具传给他们的孩子 如果我可以引用(我自己)的话: 尽可能避免连接组件,并将道具传递给 对孩子来说,这主要是为了防止依赖 雷杜。我宁愿尽可能让我的组件保持“哑巴”状态,并让它们保持沉默 只关注事物的外观。我确实有一些组件 关注事物应该如何工作,这些组件主要是 处理逻辑并将数据传递给孩子们,他们是 我经常连接的组件 当我注意到我的应用程序正在扩展,并且我的一些组件正在 作为道具的代理(我甚至得到了一个词!“Propxy”), 也就是说,他们从父母那里得到道具,然后将道具传给父母,而不带道具 使用它们,我通常在中间注入一个连接的组件。 组件树,这样我就可以让“propxy”组件从树上下来 水流更轻更纤细 您还应该注意,连接组件的另一个陷阱是,每个渲染都会触发
mapstatetrops
方法。如果你有一些沉重的逻辑,你应该记住它,通常用
至于连接组件的好处,您可能已经意识到了这一点。您可以通过react的上下文快速访问提供程序的状态
编辑
作为您评论的后续内容:
关于渲染-如果我有一个深度嵌套的子级(在中大型应用程序中很常见),在每次父级更新时都会不必要地重新渲染,那么我会有更多不必要的渲染吗
如果mapstatetops
的前一个对象与返回的当前对象相同,那么connect
HOC包装器将不会触发重新渲染。因此,不会对连接的组件进行不必要的重新渲染。
您可以在我使用第一个选项中详细了解它是如何工作的,以及逻辑是如何随时间演变的。
您编写的cons是正确的,但我认为这样更容易调试和理解数据流。
- 如果当前组件不使用来自redux的数据,并且只传递这些数据,则不要将组件连接到redux
- 如果组件使用数据,则连接到redux
- 如果当前组件使用来自redux的数据,而下一个组件也使用它,那么您可以传递数据,而不需要将下一个组件连接到redux
主要规则:
如果从父级到子级的数据使用链中存在间隙,则不需要从父级到子级传递数据
连接(父级)(不使用道具)=>child(不使用)=>child(不使用)=>child(使用)-最好连接最后一个孩子。与道具dreeling相关的Isuue建议使用第二个,使用Redux,因为使用Redux devtools for Chrome进行调试很容易。子组件中的公共道具应提取到全局存储/状态。如果有很多连接的组件,则存储中的“更新为1”变量将导致所有组件中的重新渲染/更新,从而导致延迟。然后,您需要更多地分解存储(首选),或者使用shouldComponentUpdate。谢谢您,这再次迫使我准确地思考说实话,当我必须在MapStateTrops
中放入逻辑时,我有0个用例。它总是返回一个对象,这就是它。关于渲染-如果我有一个深度嵌套的子级(在中大型应用程序中很常见),在每次父级更新时都会不必要地重新渲染,我会有更多不必要的渲染吗?实际上,如果使用redux logger
调试第二个选项会更容易。至少从我的经验来看