Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将子组件连接到存储与将父组件连接到存储并传递道具_Javascript_Reactjs_React Native_React Redux - Fatal编程技术网

Javascript 将子组件连接到存储与将父组件连接到存储并传递道具

Javascript 将子组件连接到存储与将父组件连接到存储并传递道具,javascript,reactjs,react-native,react-redux,Javascript,Reactjs,React Native,React Redux,经过大量搜索并使用React和React Native。我对这件事的看法仍然很模糊 在什么情况下最好使用 将父组件连接到存储并将所有数据作为道具传递给子功能组件。我最初的想法是“反应”方式,但很快我就发现,随着应用程序的增长,父组件处理的逻辑量开始变得太大和混乱。子组件也开始有自己的子组件,等等 具有功能性的父组件(Screen),并且需要商店信息的每个子组件都将连接到该组件。这是一个更为“干净”的解决方案,但会产生大量不必要的存储连接“重复” 使用Redux存储 一般来说,我的问题是推荐使用哪

经过大量搜索并使用React和React Native。我对这件事的看法仍然很模糊 在什么情况下最好使用

  • 将父组件连接到存储并将所有数据作为道具传递给子功能组件。我最初的想法是“反应”方式,但很快我就发现,随着应用程序的增长,父组件处理的逻辑量开始变得太大和混乱。子组件也开始有自己的子组件,等等

  • 具有功能性的父组件(
    Screen
    ),并且需要商店信息的每个子组件都将连接到该组件。这是一个更为“干净”的解决方案,但会产生大量不必要的存储连接“重复”

  • 使用Redux存储


    一般来说,我的问题是推荐使用哪种模式,以及在哪些用例中,如果能知道大量连接(容器)组件的价格,我会很高兴的

    我不确定我能为这个问题提供正确或错误的答案,因为每个都有其优缺点。
    我的经验法则是,只有当它们的父组件是“道具的代理”时,才连接深度嵌套的组件。也就是说,他们接受道具只是为了把道具传给他们的孩子

    如果我可以引用(我自己)的话:

    尽可能避免连接组件,并将道具传递给 对孩子来说,这主要是为了防止依赖 雷杜。我宁愿尽可能让我的组件保持“哑巴”状态,并让它们保持沉默 只关注事物的外观。我确实有一些组件 关注事物应该如何工作,这些组件主要是 处理逻辑并将数据传递给孩子们,他们是 我经常连接的组件

    当我注意到我的应用程序正在扩展,并且我的一些组件正在 作为道具的代理(我甚至得到了一个词!“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
    调试第二个选项会更容易。至少从我的经验来看