Я пытаюсь выяснить, как автоматически обновлять состояние после запроса на исправление, чтобы при нажатии кнопки он автоматически добавлял свои лайки в счетчик. К сожалению, для обновления по-прежнему требуется загрузка страницы. Вы можете что-нибудь увидеть по этому поводу? Любая помощь очень ценится, спасибо.
import React, { Component } from "react";
import "./Like.css";
class Button extends Component {
constructor(props) {
super(props);
this.state = {
counter: this.props.counter
};
}
handleSubmit = event => {
event.preventDefault();
fetch(`http://localhost:3001/api/tracklists/${this.props.id}`, {
method: "PATCH",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
tracklist: {
title: this.props.title,
url: this.props.url,
genre: this.props.genre,
tracklist: this.props.tracklist,
likes: this.props.counter + 1
}
})
})
.then(response => response.json())
.then(response => {
this.setState({
counter: this.props.counter
});
});
};
render() {
return (
<div className = "customContainer">
<button onClick = {this.handleSubmit}>{this.state.counter}</button>
</div>
);
}
}
export default Button;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добро пожаловать в SO
Я нигде не вижу ваших реквизитов, но я предполагаю, что это сделано для экономии места и удобства чтения.
Вы пробовали использовать встроенный метод жизненного цикла React Component componentDidUpdate(prevProps)?
В вашем случае вы бы сделали
componentDidUpdate(prevProps) {
// you always need to check if the props are different
if (this.props.counter !== prevProps.counter) {
this.setState({ counter: this.props.counter });
}
}
Вы можете найти документацию здесь: https://reactjs.org/docs/react-component.html#componentdidupdate
При этом я не понимаю, почему вы не отображаете опору напрямую, а не дублируете ее в состоянии ... Например:
render() {
return (
<div className = "customContainer">
<button onClick = {this.handleSubmit}>{this.props.counter}</button>
</div>
);
}
responseJSON, который вы получите, не может дать вам некоторую информацию, например, о новом количестве лайков?