Reactjs 重新选择-仅将部分状态传递给选择器有意义吗

Reactjs 重新选择-仅将部分状态传递给选择器有意义吗,reactjs,redux,react-redux,reselect,Reactjs,Redux,React Redux,Reselect,我的商店包含一个goals数组。有一个目标组件,我用connect()连接到redux商店,因此它有一个Goal作为它的道具 目标组件有子对象,所有子对象都需要整个目标对象来创建派生数据。我想使用reselect来帮助提取这些数据是如何导出的,但是当我已经可以访问目标时,再次从整个redux存储中选择相同的目标对我来说没有意义 因此,我当前正在将目标对象从目标组件传递给它的子对象,并在执行此操作时对其调用选择器 这意味着选择器的参数只是一个目标,是状态的一部分,而不是整个状态。所有关于如何使用此

我的商店包含一个
goal
s数组。有一个目标组件,我用connect()连接到redux商店,因此它有一个
Goal
作为它的道具

目标组件有子对象,所有子对象都需要整个目标对象来创建派生数据。我想使用reselect来帮助提取这些数据是如何导出的,但是当我已经可以访问目标时,再次从整个redux存储中选择相同的目标对我来说没有意义

因此,我当前正在将目标对象从目标组件传递给它的子对象,并在执行此操作时对其调用选择器

这意味着选择器的参数只是一个目标,是状态的一部分,而不是整个状态。所有关于如何使用此选项的示例都使用“连接”,因此选择器函数将接受整个状态

我的方法有意义吗?还是我完全没有抓住要点,不再正确地封装状态树的形状


任何评论/建议都将不胜感激

您可以选择通过道具(从家长到孩子)传递目标-这意味着家长是“聪明的”(了解状态),而孩子是“愚蠢的”(只是呈现道具中给出的内容)


或者,您可以访问子组件中的状态(任意多或少)。

选择器的目的是保存派生数据,这样您的redux存储就不必这样做。按状态树的子部分传递是合法的:

const getThing = state => state.the.thing.I.care.about;
const getBoundaryConditions = state => state.the.boundary.conditions.man.whoa;

export const getTheThingICareAbout = createSelector(
  [ getThing, getBoundaryConditions ],
  (thing, conditions) => {
    //do stuff to thing depending on conditions
    return thing.beConditionallyAwesome(conditions);
  }
);
此外,虽然可以通过道具将目标对象传递给目标组件的子对象,但最好通过道具将id值(或其他内容)传递给子对象,并让子对象使用
connect()
(请参阅
connect()
的强大的第三个
mergeProps
参数,它允许您在整个状态树和分派旁边使用传入的props
ownProps
,这非常方便)

这更好,因为目标组件不必通过道具向下传递一个大而胖的对象。相反,子组件可以在
mapStateToProps()
中选择他们关心的目标对象的特定部分,并保持组件道具的浅度


…至少这是我的观点。祝你好运!

太棒了,谢谢你的帮助。为了澄清-
goalComponent
从道具接收id,然后使用选择器和连接获取状态的目标部分。(我已经做了那部分)但是,我没有将整个目标传递给每个
goalChildComponent
,而是再次传递id,每个
goalChildComponent
调用相同的函数来再次从状态中选择相同的目标,只是使用不同的函数来创建不同的派生数据?我不喜欢重复获取t的想法他是这个州的一部分,我可以把它传给他。但我认为你是对的。你的建议与医生的建议相符,所以我同意。再次感谢!