【发布时间】:2019-04-09 09:57:57
【问题描述】:
我正在研究 React 和 Redux,在解决这个问题几个小时后,我仍然无法使用 React 和 Redux 在 Firebase 中删除文档。
我在仪表板中显示项目摘要,并尝试添加删除按钮。
单击按钮后,项目将传递到我要删除项目的projectActions.js 操作。在此之后,我想将类型发送到projectReducer.js。当我单击按钮时,我没有收到错误,并且在返回后我无法输出任何console.log。我确实将项目数据放入removeProject() 函数中。
我已经尝试删除removeProject() 和console.log 中的return 方法被传递的项目。我可以获得project.id 并将其添加到firestore.collection.delete() 函数中。但是由于返回后没有任何效果,这是不可能的。
ProjectSummary.js:
import React, { Component } from 'react'
import moment from 'moment'
import { connect } from 'react-redux'
import { removeProject } from '../../store/actions/projectActions'
import { Link } from 'react-router-dom'
class ProjectSummary extends Component {
state = {
project: this.props.project
}
handleRemove = (e) => {
e.preventDefault()
removeProject(this.state.project)
}
render() {
const { project } = this.props
return (
<div className="card z-depth-0 project-summary">
<div className="card-content grey-text text-darken-3">
<Link key={project.id} to={'/project/' + project.id}>
<span className="card-title">{project.title}</span>
</Link>
<p>Posted by {project.authorFirstName} {project.authorLastName}</p>
<p className="grey-text">{moment(project.createdAt.toDate()).calendar()}</p>
<a className="waves-effect waves-light btn" onClick={this.handleRemove}>Remove</a>
</div>
</div>
)
}
}
const mapDispatchToProps = (dispatch) => {
return {
removeProject: (project) => dispatch(removeProject(project))
}
}
export default connect(null, mapDispatchToProps)(ProjectSummary)
projectActions.js:
export const removeProject = (project) => {
return (dispatch, getState, { getFirestore }) => {
const firestore = getFirestore()
firestore.collection('projects').doc(project).delete()
.then(() => {
dispatch({ type: 'REMOVE_PROJECT' })
}).catch(function(err) {
dispatch({ type: 'REMOVE_PROJECT_ERROR', err})
});
}
}
projectReducer.js:
const projectReducer = (state = initState, action) => {
switch (action.type) {
case 'CREATE_PROJECT':
console.log("Created Project", action.project)
return state
case 'CREATE_PROJECT_ERROR':
console.log('create project error', action.err)
return state
case 'REMOVE_PROJECT':
console.log('Removed Project')
return state
case 'REMOVE_PROJECT_ERROR':
console.log('Removed Project Error', action.err)
return state
default:
return state
}
}
【问题讨论】:
-
你的reducer什么都没做,不清楚是什么问题,看来你不懂redux的概念。
-
除了打印到控制台之外,你希望 reducer 做什么?
-
可以肯定这是来自The Net Ninja youtube 频道。我也有兴趣知道如何删除帖子。你找到方法了吗?
-
只是为了澄清,下面提供的答案能够成功地用于 The Net Ninja 的教程。 (稍作调整)。
标签: javascript reactjs firebase redux google-cloud-firestore