Fur*_*raz 5 javascript ajax json ecmascript-6 reactjs
正如标题所说,我正在尝试使用fetch()加载一个React组件,该组件包含我从JSON中获取的数据.
api调用工作正常,但我无法呈现数据.
这是代码:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
user: {}
}
}
getUserById(uId) {
fetch(`https://jsonplaceholder.typicode.com/users/${uId}`)
.then( (response) => {
return response.json()
})
.then( (json) => {
return json;
});
}
componentDidMount() {
this.setState({
user: this.getUserById(4)
})
}
render() {
return (
<div>
<h1>User</h1>
<p>ID: {this.state.user.id}</p>
</div>
);
}
}
ReactDOM.render(
<App/>,
document.getElementById("container")
);
Run Code Online (Sandbox Code Playgroud)
<div id="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
有什么想法解决这个问题吗?
问题在于这一行:
<div class="container"></div>
Run Code Online (Sandbox Code Playgroud)
你定义class
并获得它getElementById
.
另一个变化是,ajax调用将是异步的,因此getUserById
不会立即返回数据,setState
并将undefined
在状态变量中设置值而不是从服务器返回的数据.要解决此问题,请在setState
获得响应后执行.
检查一下:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
user: {}
}
}
getUserById(uId){
fetch(`https://jsonplaceholder.typicode.com/users/${uId}`)
.then( (response) => {
return response.json()
})
.then( (json) => {
this.setState({
user: json
})
});
}
componentDidMount() {
this.getUserById(4);
}
render() {
console.log(this.state.user);
return (
<div>
<h1>User</h1>
<p>ID: hello</p>
</div>
);
}
}
ReactDOM.render(
<App/>,
document.getElementById("container")
);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>
Run Code Online (Sandbox Code Playgroud)
注意:您正在进行ajax
调用,而不是在setState中调用funtion,一旦得到响应,请在.then内执行setState,如下所示:
.then(json => {
this.setState({user: json});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8360 次 |
最近记录: |