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
参数,它允许您在整个状态树和分派旁边使用传入的propsownProps
,这非常方便)
这更好,因为目标组件不必通过道具向下传递一个大而胖的对象。相反,子组件可以在mapStateToProps()
中选择他们关心的目标对象的特定部分,并保持组件道具的浅度
…至少这是我的观点。祝你好运!太棒了,谢谢你的帮助。为了澄清-
goalComponent
从道具接收id,然后使用选择器和连接获取状态的目标部分。(我已经做了那部分)但是,我没有将整个目标传递给每个goalChildComponent
,而是再次传递id,每个goalChildComponent
调用相同的函数来再次从状态中选择相同的目标,只是使用不同的函数来创建不同的派生数据?我不喜欢重复获取t的想法他是这个州的一部分,我可以把它传给他。但我认为你是对的。你的建议与医生的建议相符,所以我同意。再次感谢!