Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Reactjs 组织选择器的合理方式?_Reactjs_Redux - Fatal编程技术网

Reactjs 组织选择器的合理方式?

Reactjs 组织选择器的合理方式?,reactjs,redux,Reactjs,Redux,我对React/Redux是新手,我有一个问题,我在其他任何地方都找不到答案 在容器中,您必须从redux状态获取所需的道具。显然,在mapstatetops中分解状态是个坏主意,容器不应该知道状态形状 所以我们有选择器选择器很好,它们可以重复使用或组合,容器只需使用选择器即可获取所需的数据,而无需知道状态的结构,但我仍然无法找到合理的方法来组织选择器 问题是状态形状将来可能会改变,在这种情况下,我们必须更新我们的选择器,您不希望得到不正确的数据,或者更糟糕的是,得到运行时错误 更新状态树后,

我对React/Redux是新手,我有一个问题,我在其他任何地方都找不到答案

在容器中,您必须从
redux
状态获取所需的道具。显然,在
mapstatetops
中分解状态是个坏主意,容器不应该知道状态形状

所以我们有
选择器
<代码>选择器很好,它们可以重复使用或组合,容器只需使用
选择器
即可获取所需的数据,而无需知道状态的结构,但我仍然无法找到合理的方法来组织选择器

问题是状态形状将来可能会改变,在这种情况下,我们必须更新我们的
选择器
,您不希望得到不正确的数据,或者更糟糕的是,得到
运行时错误

  • 更新状态树后,您如何知道哪些选择器需要更新
Dan Abramov在egghead上有一门课程(帮助我开始学习
redux
,很棒的课程),他所做的基本上是用相关的减缩器(or)导出
选择器,这是有意义的,因为当你更新
减缩器时,你知道你只需要更新相关的
选择器
(位于同一文件中)

但正如您在代码中看到的,所有内容都必须经过根减缩器,而不仅仅是这样,如果我需要在
“叶减缩器”
中获取一些数据,我必须在
减缩器中创建
选择器
根减缩器
和所有中间的
减缩器
,这似乎不是一个好主意

  • 那么,您如何组织您的
    选择器

我的应用程序的状态取决于主题,并具有类似

state
- ui
  - topic1
    - setting1
    - setting2
  - topic2
    - setting1
    - setting2
- user
  - name
  - role
- items
  - currentlySelectedItem
  - listOfAllItems
我正在使用创建高效和可组合的选择器。在我的文件结构中,您会发现选择器的排序方式类似:

folder1
folder2
redux-actions
redux-reducers
redux-selectors
- uiSelectors.js
- userSelectors.js
- itemsSelectors.js
...
文件uiSelectors.js包含
state.ui
的选择器。如果我愿意,我会添加一个文件
uiTopic1Selectors.js
。当然,如果你有一个真正大的应用程序,这可能会让人困惑,但对我来说它可以工作。顺便说一句:我对我的减缩器使用类似的结构

当我改变状态时,我必须改变一些选择器。因为我的选择器是可组合的,我通常不需要改变太多


stateToProps函数我通常放在页面本身的文件中或页面文件夹中的
page1Selector.js
文件中。

谢谢您的回答,我仍然有一个问题。如果您决定进行大的重构,对状态树进行大量更改,那么很可能会遇到运行时错误,对吗?我认为使用composable选择器和减缩器使您的程序保持敏捷。使用它们的下一步是测试它。我建议为选择器和减缩器编写单元测试。测试的输入和输出是JSON格式,易于测试,您有很好的概述。测试将帮助您防止运行时错误。我用于测试。