Reactjs 反应+;Firebase-删除映射组件内的Firebase对象
我试图将项目对象的键传递给映射组件,以便删除它们 更新:使用Reactjs 反应+;Firebase-删除映射组件内的Firebase对象,reactjs,firebase,lodash,Reactjs,Firebase,Lodash,我试图将项目对象的键传递给映射组件,以便删除它们 更新:使用。.forEach(project,(proj,key)=>)抛出一个关于对象不是有效子对象的错误。我猜这是因为我正在研究的项目需要转换成一个数组?我一直试图在componentWillMount()中格式化,但当我尝试使用setState运行forEach并推送到新数组时,我不断得到重复的数组 componentDidMount() { projectRef.on('value', snap => { thi
。.forEach(project,(proj,key)=>)
抛出一个关于对象不是有效子对象的错误。我猜这是因为我正在研究的项目需要转换成一个数组?我一直试图在componentWillMount()
中格式化,但当我尝试使用setState
运行forEach
并推送到新数组时,我不断得到重复的数组
componentDidMount() {
projectRef.on('value', snap => {
this.setState({projects: snap.val()})
// somehow i need to create a new array of objects that include the key.
})
}
更新:我删除了代码笔示例。我更喜欢代码沙盒。好多了
(如果您得到有关[默认值]的错误)应用程序已经被定义,只需刷新输出浏览器,它就会工作。我不知道为什么它会这样做…哦,好吧。我在代码沙盒示例中添加了我的尝试,使用forEach
。希望有人能让我知道我做错了什么。是的,map返回一个对象值数组,在这种情况下,您可以使用对象通过
组件中的道具访问,但不通过对象每个元素的键访问
也许您可以使用lodash循环并访问数据集合中每个元素的键和值。这样,您可以将键(这将是remove方法的目标)作为特定的道具传递,将值作为组件中的项目道具传递。
问题是,每个对象的键是firebase中的标识符,值是包含所需数据的对象,但该对象没有key
属性,因此它被计算为null。每个项
都应该在f中的数据结构中有一个唯一标识符,其形式为键:值
对iRelase。所以你应该在每个
组件的props.item
中查找它。在firebase中查看数据结构的简短而直接的片段会很有用。这正是我想要的!让我在早上运行这个,然后在我确认这确实是pat后,我会将你的答案标记为gold祝贺荣耀!干杯,伙计。我真的很感激!好的。太接近了。我收到一个错误对象作为React子对象无效我感觉这是由于我如何设置快照的状态。val()然后在它们上面运行forEach。我只是不确定…想法?这意味着在你的一个渲染方法中,你传递的是一个javascript对象而不是一个有效的JSX。你能使用codesanbox设置一个精简的实时示例吗?:你所需要的只是一个github帐户我已经创建了codepen示例。不过我会用我的0.forEach尝试来更新它andbox看起来很酷。我来看看。我不太喜欢codepen。好的,我创建了代码沙盒示例。比codepen好得多。但是,重新加载firebase init时存在一个错误,因此在进行任何更改后,您必须刷新输出浏览器才能使其正常工作
export default class extends React.Component {
constructor() {
super()
this.state = {
items: null
}
}
render() {
return() {
<div>
{_.forEach(this.state.items, (item, key) =>
<Display key={key} itemKey={key} item={item}/>
)}
</div>
}
}
}
// then the display component
removeItem() {
firebase.database().ref({this.props.itemKey}).remove();
}
render() {
return (
<div>{this.props.item.name} <button onClick={this.removeItem}>X</button>
)
}
<div>
{_.map(projects, (proj, key) => <Project
key={key}
title={proj.title}
subtitle={proj.subtitle}
desc={proj.desc}
itemKey={key} // just the key of the object
/>
)}
</div>