【发布时间】:2017-07-22 19:15:49
【问题描述】:
在React的官方tutorial(井字游戏)中,使用了三个组件:Game、Board和Square。
Game 包含一个 squares 数组,可以包含 X、O 和 null:这三个都是原始类型。
我的问题:使用 es6 类(不扩展组件,因为不渲染任何东西)来保存信息原语肯定不能保存,这是一种公认的做法吗?这些类也可以从其他类继承。
例如,我们可以将Piece 类的对象存储在squares 数组中,而不是X/O 显示piece.name 在正方形中吗?我们可以将piece 从i 移动到j 以反映在棋盘上吗?
需要问这个有两个原因:
几乎所有 React 示例都围绕组件展开。我还没有看到其他使用的类。
不鼓励对组件 (composition vs inheritance) 进行继承,我认为在上面的示例中需要专门化
Piece类。
谢谢。
【问题讨论】:
-
我想不出你不能这样做的原因,但我能想到你不应该这样做的原因。您正在尝试做的事情我相信使用功能性无状态组件来表示
Piece会更好地完成。Piece的属性将由父组件的状态或redux存储提供给它。Piece本身只是展示性的。它所在位置的逻辑应该在更高的组件中。我真的不认为这里需要上课。 -
这个问题可能是主观的,可能无法回答。以我的经验,通常对象用于状态
{age: 25, name: 'John Doe'},类不用于状态,而是用于组件,如您所说。请参阅state & lifecycle docs。 -
@styfle,同意对象可以包含状态但不涉及继承。
Person可以有{age: 25, name: 'John Doe'},但它的扩展类Employee应该有相同的字段加上其他一些字段。那是从面向对象的角度来看的。只是想知道我们将如何在 React 中解决这个问题。还是谢谢。 -
谢谢@KyleRichardson。 “Piece 的属性将由父组件的状态赋予它”。这就是我的困惑所在。这些属性存储在哪里以及如何存储?对象,类,还是别的?绝对不是组件(函数式或类),因为没有渲染任何内容,这就是组件的用途。
-
@TalhaAwan 他们的状态,如果他们需要与他们直接相关的状态,将被存储在父组件状态的对象中,或者在
store中。他们甚至可能不需要状态,具体取决于您想要做什么并且可能不需要。他们可能会得到道具。他们的位置将由董事会的状态决定。他们的名字、长相等将由他们创建的道具决定。
标签: javascript reactjs inheritance ecmascript-6