Javascript 什么是适当的反应体系结构?

Javascript 什么是适当的反应体系结构?,javascript,reactjs,Javascript,Reactjs,在创建React应用程序时,我当前正在创建一个应用程序,其中父组件正在处理和管理所有状态更改。我将必要的状态和函数作为道具传递给每个孩子。这是一种“首选”方式,还是子组件应该处理/管理它们自己的状态 如果一个组件需要有自己的状态,而它的父级并不关心这个状态,我看不出有任何理由在父级中定义它 在父级中定义这样的状态将增加不需要的复杂性。这也会使维护变得困难 如果本地状态是在它所属的位置定义的,那么理解和维护代码就会容易得多。如果一个组件需要有自己的状态,而它的父级并不关心,我看不出有任何理由在父级

在创建React应用程序时,我当前正在创建一个应用程序,其中父组件正在处理和管理所有状态更改。我将必要的状态和函数作为道具传递给每个孩子。这是一种“首选”方式,还是子组件应该处理/管理它们自己的状态

如果一个组件需要有自己的状态,而它的父级并不关心这个状态,我看不出有任何理由在父级中定义它

在父级中定义这样的状态将增加不需要的复杂性。这也会使维护变得困难


如果本地状态是在它所属的位置定义的,那么理解和维护代码就会容易得多。

如果一个组件需要有自己的状态,而它的父级并不关心,我看不出有任何理由在父级中定义它

在父级中定义这样的状态将增加不需要的复杂性。这也会使维护变得困难


如果在代码所属的位置定义了本地状态,那么理解和维护代码就会容易得多。

这种方法会在一段时间内奏效,但您很快就会发现整个应用程序逻辑都被推到了顶层组件,而且,您要通过许多嵌套的子组件层来传递它,以便在需要的地方得到它

一种方法是尽可能地向下移动各种状态(但不能再往下移动)。本文对此进行了探讨。因此,如果应用程序的一个子树只需要某些状态或状态更改函数,只需将其放在该子树的顶部即可。但这看起来仍然很混乱,尤其是当你的应用程序需要大量数据时

新的ish特性有助于解决通过多个组件层传递数据的问题。但它并没有改变这样一个事实,即您的许多状态和状态修改函数都停留在顶部组件中

为了解决这个问题,您需要研究一种状态管理工具,如或。虽然Redux非常流行,但我发现MobX更容易适应。基本上,您最终将把所有的应用程序数据和逻辑从React组件中移出,放到它们自己的类中。使用,您将配置这些类(或它们的一些属性)作为属性直接“注入”到各个React组件中。然后MobX将“观察”这些类中的某些值,并告诉React组件在更改时重新渲染


习惯需要一点时间,但我对结果非常满意。令人沮丧的是,大多数React教程都忽略了这个问题,或者让它听起来像只需要MobX/Redux来处理非常高级的用例。我发现它们对于非常简单的演示之外的任何东西都是必要的。

这种方法会在一段时间内奏效,但您很快就会发现,您的整个应用程序逻辑都被推到了顶部组件,并且您正在通过许多嵌套的子组件层将其传递到需要的地方

一种方法是尽可能地向下移动各种状态(但不能再往下移动)。本文对此进行了探讨。因此,如果应用程序的一个子树只需要某些状态或状态更改函数,只需将其放在该子树的顶部即可。但这看起来仍然很混乱,尤其是当你的应用程序需要大量数据时

新的ish特性有助于解决通过多个组件层传递数据的问题。但它并没有改变这样一个事实,即您的许多状态和状态修改函数都停留在顶部组件中

为了解决这个问题,您需要研究一种状态管理工具,如或。虽然Redux非常流行,但我发现MobX更容易适应。基本上,您最终将把所有的应用程序数据和逻辑从React组件中移出,放到它们自己的类中。使用,您将配置这些类(或它们的一些属性)作为属性直接“注入”到各个React组件中。然后MobX将“观察”这些类中的某些值,并告诉React组件在更改时重新渲染


习惯需要一点时间,但我对结果非常满意。令人沮丧的是,大多数React教程都忽略了这个问题,或者让它听起来像只需要MobX/Redux来处理非常高级的用例。我发现,除了非常简单的演示之外,任何东西都需要它们。

这一切归结为一个问题

该组件是可重用的独立组件吗?

如果是,那么它可以有自己的状态,并且可以毫无困难地插入任何组件


在决定放置状态时考虑这些指针是个好主意。< /强>

  • 有些组件不能独立存在,只能在父组件中使用。在这种情况下,最好将状态存储在父级中,然后深入到子级
  • 有些组件只关注UI逻辑,而不是太多,例如带有验证的输入框。在这些情况下,最好将输入验证的状态放在组件本身中,因为父级不必关心验证逻辑
  • 如果多个子组件依赖于来自父组件的数据/值,那么最好将状态放在父组件中

经验法则是,始终将状态存储在父组件中,除非子组件完全独立并且也可以用于其他父组件

这一切归结为一个问题

该组件是可重用的独立组件吗?

如果是,那么它可以有自己的状态,并且可以毫无困难地插入任何组件


在决定放置状态时考虑这些指针是个好主意。< /强>

  • 有些组件不能独立存在,但是