我已经使用FreeCodeCamp项目制作了this far,并且在一些已经走过react.js道路的人们的帮助下获得了一些帮助。 然而,在我继续之前,有人可以向我解释一下“this.handleData”在下面的代码中完成了什么吗? (这是我允许使用的其他人的代码,它帮助我获取我从api抓取的数据以在页面上呈现,但handleData究竟在做什么?)
var LeaderList = React.createClass({
render:function(){
return(
<div >
<h1>Here is the data...</h1>
<AllData />
</div>
);
}
});
var AllData = React.createClass({
dataUrl: 'https://fcctop100.herokuapp.com/api/fccusers/top/recent',
getInitialState: function() {
return {data: []}
},
componentDidMount: function(){
$.getJSON(this.dataUrl, this.handleData)
},
handleData: function(data){
this.setState({data: data});
},
render: function(){
var elems = [];
for(var i=0; i<this.state.data.length; i++){
var subelems = [];
subelems.push(<div><p>{this.state.data[i].img}</p></div>);
subelems.push(<div><p>{this.state.data[i].username}</p></div>);
subelems.push(<div><p>{this.state.data[i].recent}</p></div>);
subelems.push(<div><p>{this.state.data[i].alltime}</p></div>);
elems.push(subelems);
}
return (<div>{elems}</div>);
}
});
ReactDOM.render(
<LeaderList />,
document.getElementById('content')
);
答案 0 :(得分:0)
在该代码中handleData
是一个调用setState
的自定义方法。 setState是React Component API的一部分。它使Component重新呈现,使用传递给它的数据来设置组件可用的this.state
属性。可以使用this.state
方法访问render
,因此传递给data
的{{1}}可用于handleData
方法。
正如您在render
方法中所看到的,访问render
来控制创建DOM的位置。
答案 1 :(得分:0)
首先,cython
调用您的组件的componentDidMount()
,并获取一些数据。 dataUrl
获取该数据并使用它来设置组件的状态或内部数据存储。
然后在组件的handleData
函数中使用它,只要状态发生变化就会调用它。
答案 2 :(得分:0)
我认为从这里开始的地方是componentDidMount
功能。如果您查看React组件生命周期,您会看到在将组件放入DOM时,在初始渲染后调用此函数:https://facebook.github.io/react/docs/component-specs.html
文档建议:
如果要与其他JavaScript框架集成,请设置计时器 使用setTimeout或setInterval,或发送AJAX请求,执行这些 这种方法的操作。
看起来我们正在这里进行Ajax调用(通过我假设是JQuery)从服务器获取一些数据。我们传入handleData
作为回调,一旦Ajax请求完成,将调用结果,这样做:
this.setState({data: data});
要了解React中的state
是什么,这里有几个很好的链接:
https://facebook.github.io/react/docs/thinking-in-react.html https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html
状态仅保留用于交互性,即随时间变化的数据
这适用于我们,因为Ajax请求的结果将改变这些数据 - 从无到有,只有一次,但它仍然会改变。当你致电setState
时,React会触发&#34;状态转换&#34;它最终会再次调用render
,它将使用您的数据填充elems
变量并将其显示在屏幕上。