Так что я создаю это приложение, которое позволяет пользователям оставлять комментарии.
Я столкнулся с проблемой, когда при попытке опубликовать комментарий он фактически не добавляется к уже существующему комментарию, а просто заменяет комментарий, который уже был там.Я не уверен, что происходит неправильно, чтобы это произошло.
Вот мой экспресс-маршрут для комментария:
.put((req, res) => {
Issue.findByIdAndUpdate(req.params.id, req.body, {$push: {comments: req.body.comments}}, (err, updatedComment) => {
if(err) return res.status(500).send(err);
return res.send(updatedComment);
})
})
Вот мой Redux, где я на самом деле использую тот же создатель действийкогда я редактирую пост для добавления комментариев:
export const getIssues = () => {
return dispatch => {
axios.get("/issues").then(response => {
dispatch({
type: "GET_ISSUES",
issues: response.data
})
}).catch(err => {
console.log(err);
})
}
}
export const editIssue = (editedIssue, id) => {
return dispatch => {
axios.put(`/issues/${id}`, editedIssue).then(response => {
dispatch(getIssues());
}).catch(err => {
console.log(err);
})
}
}
const reducer = (state = [], action) => {
switch(action.type){
case "GET_ISSUES":
return action.issues
default:
return state
}
}
Вот форма для добавления комментария и метод onClick:
addComment = () => {
this.props.editIssue({
comments: this.state.comment
}, this.props.id)
}
<button onClick={this.toggleComment}>Add A Comment</button>
{this.state.isCommenting ? <form>
<input type="text" value={this.state.comment} name="comment" placeholder="Add A Comment..." onChange={this.handleChange}/>
<button onClick={this.addComment}>Submit</button>
</form>: null}
И, наконец, моя схема для поста:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const issuesSchema = new Schema({
issue: {
type: String,
required: true
},
description: {
type: String,
required: true,
},
comments: [String]
})
module.exports = mongoose.model("Issues", issuesSchema);
Дайте мне знать, есть ли что-нибудь еще из моего кода, которое вы хотели бы увидеть.Я намеренно опустил часть кода, потому что чувствую, что этот пост уже длинный, как есть.