У меня есть канал, где вы можете отправлять записи. Эти записи могут понравиться любому пользователю. Проблема в том, что после того, как вам понравится запись и продолжайте писать свою запись сразу после (таким образом, нажав новую запись в начало фида), состояние всех подобных кнопок, которые вы нажали, будет отменено визуально и для того, чтобы см. правильные данные, отображаемые вручную.React Rails - Как состояние кнопки, не обновляющееся должным образом
Эта проблема очень странная, и я, к сожалению, не нашел ничего, что могло бы быть связано с этим.
Вот мой код Как компонент (like.es6.jsx):
class Like extends React.Component {
constructor(props){
super(props);
this.state={
like: this.props.entry.liked,
likes: this.props.entry.likes_count
}
this.post = this.post.bind(this);
this.delete = this.delete.bind(this);
}
post() {
if(!(this.state.like)){
$.ajax({
method: "POST",
url: "/api/v1/likes",
data: {
log_entry_id: this.props.entry.id
},
})
.then((response) => {
this.setState({like: true})
let likes = this.state.likes;
likes++;
this.setState({likes: likes})
});
}
}
delete(){
if(this.state.like){
$.ajax({
method: "DELETE",
url: "/api/v1/likes/" + this.props.entry.id
})
.then((response) => {
this.setState({like: false})
let likes = this.state.likes;
likes--;
this.setState({likes: likes})
});
}
}
render() {
let show_likes = "";
if(this.state.like) {
show_likes = (this.state.likes > 1) ? ("You and " + (this.state.likes - 1) + ((this.state.likes == 2) ? (" other person") : (" others")) + (" like this.")) : ("You like this.");
}else if(this.state.likes > 0){
show_likes = (this.state.likes == 1) ? (this.state.likes + " person likes this.") : (this.state.likes + " people like this.");
}
let like_button = this.state.like ?
<a onClick={this.delete} className=" pull-right"><i className="fa fa-thumbs-o-down"></i> Dislike</a> :
<a onClick={this.post} className=" pull-right"><i className="fa fa-thumbs-o-up"></i> Like</a>
return (
<div>
<span>
{show_likes}
</span>
{like_button}
</div>
);
}
}
В родительском компоненте «log_entry.es6.jsx» Я добавил мой как компонент следующим образом:
<Like entry={entry} key={entry.id} />
Если есть дополнительная информация, которую я могу предоставить, я с радостью сделаю это по запросу. Спасибо, что посмотрели мою проблему.
Благодарю вас за ответ. Это похоже на вероятную причину да, и я попытаюсь реализовать это решение в своем коде. Я вернусь к вам с тем, что получаю :) – lax1n