Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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
Javascript Can';t在不可变记录中正确设置此嵌套对象_Javascript_Reactjs_Firebase_Redux_Immutable.js - Fatal编程技术网

Javascript Can';t在不可变记录中正确设置此嵌套对象

Javascript Can';t在不可变记录中正确设置此嵌套对象,javascript,reactjs,firebase,redux,immutable.js,Javascript,Reactjs,Firebase,Redux,Immutable.js,设置平面对象不可变记录没有问题。但现在我有一个问题,我想在哪里设置一个记录,我想可能是一个记录列表?我试图将firebase数据库中的用户ref放入一个或多个不可变的记录中 因此,我从firebase加载我的用户引用。它的结构看起来像 我不知道如何嵌套列表。用户有一个UID列表。从那里它变得更平坦了。但这有可能有一个记录列表吗?我还没有在网上看到任何例子,所以我在这一点上迷失了方向。任何帮助都将不胜感激 如果我在做一些更平淡的事情,比如说只是个人资料,那看起来会是这样的 export co

设置平面对象不可变记录没有问题。但现在我有一个问题,我想在哪里设置一个记录,我想可能是一个记录列表?我试图将firebase数据库中的用户ref放入一个或多个不可变的记录中

因此,我从firebase加载我的用户引用。它的结构看起来像

我不知道如何嵌套列表。用户有一个UID列表。从那里它变得更平坦了。但这有可能有一个记录列表吗?我还没有在网上看到任何例子,所以我在这一点上迷失了方向。任何帮助都将不胜感激

如果我在做一些更平淡的事情,比如说只是个人资料,那看起来会是这样的

  export const Profile = Record({
    key: null,
    profileName: '',
    profilePic: '',
    teamName: '', 
  });
似乎要通过UID列表是我面临的第一个挑战,我很难通过。一旦超过了最初的列表,它就更加平淡了


也许我甚至不应该这样做。我对其他人提出如何处理这些数据持开放态度。我只是习惯于在我的应用程序中使用不可变的记录。我希望在这最后一点上能坚持这种模式

到目前为止,基本上还没有记录列表。根据我所能找到的,您可以使用带有记录值的map,并根据答案扩展记录类,以获得与您想要的等价物(下面的代码基于此方法)

我还可以找到一篇有趣的文章,其中有多种方法,以功能的方式表达相同的想法

如果这不是你所期望的,请告诉我

var用户={
“efbluh”:{
“个人资料”:{
档案名称:'比尔',
图片:'https://blue',
团队名称:“本地人”,
},
“团队”:{
“Lpphasd”:{
竞争性:“a”
}
}
},
“fixbluh”:{
“个人资料”:{
档案名称:'比尔',
图片:'https://blue',
团队名称:“本地人”,
},
“团队”:{
“Lpphasd”:{
竞争性:“a”
},
“asdsadasda”:{
竞争性:“b”
}
}
}
};
var ProfileRecord=不可变的.Record({
档案名称:“”,
简介图片:'',
团队名称:“”,
});
var teamRecord=不可变的.Record({
竞争性:''
});
类用户扩展了Immutable.Record({'profile':new ProfileRecord(),'team':Immutable.Map()}){
构造函数({profile,team}={}){
super({team:Immutable.Map(team).Map(x=>newteamrecord(x)),profile:newprofilerecord(profile)})
}
}
var userMap=Immutable.Map(users.Map)(x=>newuser(x));
//确认它确实是一个记录
console.log(userMap.get('efbluh').get('profile').profileName)
log(userMap.get('fixbluh').toJS())
console.log(userMap.get('fixbluh').get('team').toJS())

到目前为止,基本上还没有记录列表。根据我所能找到的,您可以使用带有记录值的map,并根据答案扩展记录类,以获得与您想要的等价物(下面的代码基于此方法)

我还可以找到一篇有趣的文章,其中有多种方法,以功能的方式表达相同的想法

如果这不是你所期望的,请告诉我

var用户={
“efbluh”:{
“个人资料”:{
档案名称:'比尔',
图片:'https://blue',
团队名称:“本地人”,
},
“团队”:{
“Lpphasd”:{
竞争性:“a”
}
}
},
“fixbluh”:{
“个人资料”:{
档案名称:'比尔',
图片:'https://blue',
团队名称:“本地人”,
},
“团队”:{
“Lpphasd”:{
竞争性:“a”
},
“asdsadasda”:{
竞争性:“b”
}
}
}
};
var ProfileRecord=不可变的.Record({
档案名称:“”,
简介图片:'',
团队名称:“”,
});
var teamRecord=不可变的.Record({
竞争性:''
});
类用户扩展了Immutable.Record({'profile':new ProfileRecord(),'team':Immutable.Map()}){
构造函数({profile,team}={}){
super({team:Immutable.Map(team).Map(x=>newteamrecord(x)),profile:newprofilerecord(profile)})
}
}
var userMap=Immutable.Map(users.Map)(x=>newuser(x));
//确认它确实是一个记录
console.log(userMap.get('efbluh').get('profile').profileName)
log(userMap.get('fixbluh').toJS())
console.log(userMap.get('fixbluh').get('team').toJS())

希亚姆的建议绝对正确,所以这是公认的答案。如果你有需要的话,大多数人都应该能够接受。然而,如果你像我一样,使用firebase与redux和选择器,这就是Shyams建议对我的作用。我并不是说这是你见过的react/redux/Selector中最纯粹的例子,但它对我很有用

不用再麻烦了

最初,我通过redux操作和reducer获得用户

我的action和action creators从firebase获取数据,并从我拥有的一些高级firebase db函数中将其最初存储在键值不可变记录中

import*作为“/actionTypes”中的类型;
从“不可变”导入{Record};
从'src/firebase'导入{FirebaseList};
导出常数联盟=新记录({
key:null,
值:null
})
export const leagueFireDB=新FirebaseList({
加载:加载联盟成功,
},联盟);
导出函数loadLeague(){
log(“LOADLEAGUE::”);
返回调度=>{
leagueFireDB.path=`users/`;
leagueFireDB.subscribeChild(派遣);
};
}
导出函数LoadLeagueSucces(league){
console.log(“LEAGUElOADSuccess::”,league);
返回{
类型:types.LOAD\u LEAGUE\u SUCCESS,
有效载荷:联盟
};

}
希亚姆的建议绝对正确,所以这是公认的答案。如果你有需要的话,大多数人都应该能够接受。然而,如果你像我一样,使用firebase与redux和选择器,这就是Shyams建议对我的作用。我并不认为这是最纯粹的例子