重新选择 - 只将部分状态传递给选择器是否有意义
Reselect - does it ever make sense to pass only part of the state to a selector
我的商店包含一个 goal
数组。有一个目标组件,我使用 connect() 连接到 redux 存储,所以它有一个 goal
作为它的道具。
目标组件有子组件,它们都需要整个目标对象才能从中创建派生数据。我想使用 reselect 来帮助提取这些数据的派生方式,但是当我已经可以访问时,从整个 redux 存储中再次 select 相同的目标对我来说没有意义目标。
所以我目前正在将目标对象从目标组件传递给它的子组件,并在我这样做时调用 selector。
这意味着selector的论点只是一个目标,是国家的一部分,而不是国家的全部。如何使用此方法的所有示例都使用 "connect",因此 select 或函数采用整个状态。
我的方法有意义吗?还是我完全错过了重点,我没有再正确封装状态树的形状?
如有任何意见/建议,我们将不胜感激
您可以选择通过道具(从 parent 到 child)传球 - 这意味着 parent 是 "smart"(了解状态)和 child if "dumb" (只渲染道具中给出的内容)。
或者,您可以访问 child 组件中的状态(任意多或少)。
selector 的目的是保存派生数据,这样您的 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);
}
);
此外,虽然可以通过 props 将目标对象传递给 Goal 组件的子级,但最好通过 props 将 id 值(或其他东西)传递给子级并让子级获得使用 connect()
的状态树的相应目标(请参阅 connect()
here 的强大的第三个 mergeProps
参数,它允许您使用传入的道具 ownProps
整个状态树和调度 - 它可以非常方便)。
这样更好,因为目标组件不必通过道具向下传递一个大胖对象。相反,子组件可以 select 他们在 mapStateToProps()
中关心的目标对象的特定部分,并使组件属性尽可能浅。
...至少我是这么认为的。祝你好运!
我的商店包含一个 goal
数组。有一个目标组件,我使用 connect() 连接到 redux 存储,所以它有一个 goal
作为它的道具。
目标组件有子组件,它们都需要整个目标对象才能从中创建派生数据。我想使用 reselect 来帮助提取这些数据的派生方式,但是当我已经可以访问时,从整个 redux 存储中再次 select 相同的目标对我来说没有意义目标。
所以我目前正在将目标对象从目标组件传递给它的子组件,并在我这样做时调用 selector。
这意味着selector的论点只是一个目标,是国家的一部分,而不是国家的全部。如何使用此方法的所有示例都使用 "connect",因此 select 或函数采用整个状态。
我的方法有意义吗?还是我完全错过了重点,我没有再正确封装状态树的形状?
如有任何意见/建议,我们将不胜感激
您可以选择通过道具(从 parent 到 child)传球 - 这意味着 parent 是 "smart"(了解状态)和 child if "dumb" (只渲染道具中给出的内容)。
或者,您可以访问 child 组件中的状态(任意多或少)。
selector 的目的是保存派生数据,这样您的 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);
}
);
此外,虽然可以通过 props 将目标对象传递给 Goal 组件的子级,但最好通过 props 将 id 值(或其他东西)传递给子级并让子级获得使用 connect()
的状态树的相应目标(请参阅 connect()
here 的强大的第三个 mergeProps
参数,它允许您使用传入的道具 ownProps
整个状态树和调度 - 它可以非常方便)。
这样更好,因为目标组件不必通过道具向下传递一个大胖对象。相反,子组件可以 select 他们在 mapStateToProps()
中关心的目标对象的特定部分,并使组件属性尽可能浅。
...至少我是这么认为的。祝你好运!