Я начал использовать Meteor и React Js в своей работе, и я начинаю с ними обоими. Я создаю блог, и мне нужно обновлять сообщения, но у меня возникают проблемы при обновлении данных, данные не сохраняются в коллекции. У меня есть следующая коллекция: Сообщения (название, пул, содержание, автор, категория и теги []). Поля, которые мне нужно обновить: title, content, author, category и tags []. До сих пор я пытался решить эту проблему без положительных результатов. Я использую астрономию как схему. Надеюсь, кто-то может дать совет. Вот код:Как обновить данные в Meteor и React?
import ....other imports
import { Posts } from '../../lib/collections.jsx';
class PostManager extends Component {
constructor(props) {
super(props);
this.state = {
title: props.post.title,
content: props.post.content,
category: props.post.category,
tags: props.post.tags,
slug: props.post.slug,
author: props.post.author,
};
this.updatePost = this.updatePost.bind(this);
}
updatePost(event) {
event.preventDefault();
const post = this.props.post;
const title = this.state.title.defaultValue;
const slug = this.state.slug.defaultValue;
const content = this.state.content.defaultValue;
const category = this.state.category.defaultValue;
const tags = this.state.tags.defaultValue;
const author = this.state.author.defaultValue;
post.set({
title,
content,
category,
tags,
slug,
author,
});
if (post.validate(false)) {
const id = post.save();
console.log(id);
}
console.log(post.getValidationErrors(false));
}
render() {
return (
<div>
<h1>MANAGER Post View</h1>
<form
className="new-resolution"
onSubmit={this.updatePost}
>
<p>Title:</p>
<input type="text" ref="title"
defaultValue={this.state.title}
/>
<p>Text:</p>
<input type="text" ref="content"
defaultValue={this.state.content} />
<p>Category:</p>
<input type="text" ref="category"
defaultValue={this.state.category} />
<p>Author:</p>
<input type="text" ref="author"
defaultValue={this.state.author} />
<p>Tags:</p>
<input type="text" ref="tags" defaultValue={this.state.tags} />
<button>Update Post</button>
</form>
</div>
);
}
}
PostManager.propTypes = {
ready: PropTypes.bool.isRequired,
};
export default createContainer(() => {
const slug = FlowRouter.getParam('slug');
const handle = Meteor.subscribe('posts');
return {
ready: handle.ready(),
post: Posts.find({ slug }).fetch()[0],
};
}, PostManager);
Некоторые из ошибок, которые я получаю: Карта собственности undefind и инвариантно нарушение, попытка обновить PostManager.
Вы используете SimpleSchema или какой-либо другой инструмент? Попытка выяснить, откуда приходит сообщение post.update(). Кроме того, можете ли вы поделиться трассировкой стека? В общем, вы обычно не хотите делать ваши обновления непосредственно в клиентском коде. Я считаю, что официальная рекомендация - использовать «Meteor.methods», поскольку обновления клиентов считаются угрозой безопасности. – CodeChimp
Извините, я изменил его, чтобы установить. Спасибо за внимание! –
Можете ли вы поделиться трассировками стека и сообщениями об ошибках? – CodeChimp