Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Reactjs 反应+;Firebase-删除映射组件内的Firebase对象_Reactjs_Firebase_Lodash - Fatal编程技术网

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>