2016-04-15 35 views
1

根据文档,应该避免有多个组件与状态。我处于这种情况,我想创建一个文本框,并自动根据用户的写入方式进行垂直扩展,为此,我使用这个技巧http://www.impressivewebs.com/textarea-auto-resize/,这意味着我需要获取组件的高度。现在,我一直在玩弄它,并且将ref传递给包含状态的父组件似乎不可行,所以简单的方法是将组件中的状态保留在组件中文本框,然后从那里使用ref。多个状态组件对应用程序有什么影响?

这让我想到,多个状态组件如何对我的应用程序产生负面影响?它只是可维护性/可理解性吗?或者是否存在实际的性能问题?我注意到许多开源响应组件,您只需将其插入到应用程序保持状态,这意味着如果您使用开源组件,则可能会在应用程序中包含多个状态组件。

回答

2

对DOM上的这种技巧使用本地状态是完全可以的。这是更好的方法,比将这种实现细节分享给父组件。

一般而言,使用本地为状态:在商店

  1. 应用范围的数据外阵营(终极版,助焊剂店内,观测)
  2. 形式临时数据可以被放置在商店也。但如果除了表单以外的其他地方都不需要,最好将这些数据放在表单组件中。对DOM,短的生活和非常地方国有
  3. 技巧可以放在组件,只需要它

与它有实际的性能问题?

不会。如果您将所有状态置于组件中,您的应用程序将变得更快。因为当你更新本地状态时,只有这个组件和它的孩子更新。

但是你不应该那样做,因为它会杀死可维护性。

很多开源的反应,你会只需插入到你的应用程序保持状态

如果组件不允许你通过道具控制它的组件 - 这是不好的成分。通常开源组件编写起来更易于使用,因此它们提供了很好的默认值,它们允许您将组件添加到应用程序中,并对此感到满意。

例如,选项卡组件通常使用本地状态控制选定选项卡。但它也需要selectedTab和回调onSelect,所以你可以自己控制它。

+0

所以我听到你说的是,不把状态放在多个组件中的唯一原因是“可维护性”问题? – sboutzen

+1

@sboutzen是的。没有客观的理由完全禁止地方国家的组成部分。但从可维护性的角度来看,它很重要(https://www.safaribooksonline.com/blog/2015/10/29/react-local-component-state/)。 – iofjuupasli

0

愚蠢的组件(如你的textarea组件)不应该有数据状态。但他们可以拥有自己的UI状态。
在这种情况下,您可以轻松地保持textarea高度处于愚蠢组件状态。

相关问题