2017-04-17 59 views
1


对于我的客户端,我创建了一些类似测验web应用程序的应用程序,它基于带有巨大非常独特数据的websockets(socket.io)的redux。没有用户交互,只是表示层。它的工作原理是这样的:我通过url获取websocket事件给我的布局和有效载荷数据,然后渲染给定的url和fire redux动作,并将数据作为参数,这变成了应用程序的状态。就那么简单。 但是我注意到,在第一次呈现初始状态是加载,而不是从websocket作为参数给予行动。正如我所说的数据我得到的是巨大的,独特的,所以我不想在减速是这样的声明:React Redux - 在第一次渲染时未定义的状态

pageData: { 
    assets: [], 
    questions: [], 
    details: [] 

等。它更复杂顺便说一句,这只是一个例子。
取而代之的是我做了这样的事情:

pageData: {} 

而且我希望,在视图(使用连接)我能得到这个数据是这样的:

this.props.view.pageData.questions 

但后来事实证明,我无法得到这个,因为它在第一次渲染时未定义。所以我的问题是:

  • 是否有访问这个数据的第一渲染,而不 宣布整体结构的方法吗?
  • 如果不是,我应该重建reducer中的给定数据吗?

    • 我应该再创建减速的每一页(有喜欢过20次 具有独特的数据)

当然,我可以宣布在减速的一切,但我觉得这是非常难保持这么多数据。
但是你知道,也许我太懒惰了,我应该为每个页面声明初始状态,这个问题没有意义;)。

+0

您可以为您的redux商店指定一个initialState。 –

回答

2

我想你可以有几个选择这里:

  1. 在你的组件定义备用数据如果undefined
  2. 不要使你的页面(或组件)已收到的数据
  3. 直到按照您的建议明确定义您的initialState

所有或大多数您的组件希望或应该期望某种类型的数据格式。出于这个原因,预先布置结构(#3)似乎是最合适的。问问你自己:如果Web套接字事件数据的格式发生变化,我的应用程序是否仍能正确显示?

具体回答你的问题:

是否有访问这个数据的第一渲染,而不 宣布整体结构的方法吗?

是的,您可以在您的绑定中使用||运算符回退(#1)为空数组或对象或值。示例<MyComponent listOfItems={this.props.items || []}。这有效地创建了一个空的状态,但是,IMO应该在减速器/商店中使用initialState进行标准化。

我应该再为每个页面减速[?]

不一定适合每一页减速,但所有相关数据到应用程序商店。如果不了解更多关于应用程序架构的信息,很难肯定地说,但保留小而明确的信息块通常比一个大块更容易。

我强烈主张事先定义您的数据。这听起来可能听起来很麻烦,但它会大大地回报,并帮助其他人了解应用程序的实时数据。

相关问题