Я не уверен, какую библиотеку вы используете для $.getJson
(это jQuery
?), Но учтите, что setState
- это асинхронная операция .Это означает, что вы хотите «увидеть» изменения, если вы console.log
после того, как вы вызвали setState
.
Хотя есть и второй аргумент для setState
, который является функцией обратного вызова, которая сработает после фактического обновления состояния.,
this.setState({ views: views_res }, () => {
// this is a callback function for setState.
// this coode will run just after the state actually updated
console.log("WHAT UP DOE", this.state.views)
})
Из DOCS:
setState () не всегда сразу обновляет компонент.Это может пакетировать или отложить обновление до позже.Это делает чтение this.state сразу после вызова setState () потенциальной ловушкой.Вместо этого используйте componentDidUpdate или обратный вызов setState (setState (Updater, callback)), любой из которых гарантированно сработает после применения обновления
Редактировать
Примечаниечто эта часть:
<div>
console.log("play_count", {item.play_count})
<h1>{item.play_count}</h1> */}
</div>
не будет ничего регистрировать, так как
console.log("play_count", {item.play_count})
- это просто строка внутри блока JSX
.Если вы хотите написать выражения JavaScript внутри блока JSX
, вам следует заключить его в фигурные скобки ({}
):
См. Работающий пример:
function App() {
return (
<div>
<div>
console.log("i am just a string")
{console.log('I will show in the console')}
</div>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root">