Javascript 如何修复基于JSON响应填充React组件的问题?
每次尝试访问此区域中的数据点时,都会出现未定义的情况。谢谢你的帮助 $.getJSON是异步的,因此在React.render方法中使用prices时,没有执行回调。更好的方法是让组件本身负责调用,并将返回的价格存储在回调状态。例如Javascript 如何修复基于JSON响应填充React组件的问题?,javascript,jquery,json,reactjs,Javascript,Jquery,Json,Reactjs,每次尝试访问此区域中的数据点时,都会出现未定义的情况。谢谢你的帮助 $.getJSON是异步的,因此在React.render方法中使用prices时,没有执行回调。更好的方法是让组件本身负责调用,并将返回的价格存储在回调状态。例如 Array[871] [0 … 99] 0: 525905281.52797025 1: 604514917.0552349 2: 696637551.9520638 3: 875462960.8222823 4: 1267502400 5: 1332894080
Array[871]
[0 … 99]
0:
525905281.52797025
1:
604514917.0552349
2:
696637551.9520638
3:
875462960.8222823
4:
1267502400
5:
1332894080
6:
1467819274.5386994
7:
1498253120
8:
1703699200
9:
1743786240
10:
1864047360
11:
2725918720
12:
3191380043.7561345
13:
3652885251.1255836
14:
4587566603.506
var-App=React.createClass({
getInitialState(){
返回{
价格数据:[]
}
},
组件willmount(){
常量apiUrl=”http://www.asterank.com/api/asterank?query={%22neo%22:{%22$lt%22:%22Y%22},%20%22price%22:{%22$gt%22:100000000}&limit=1000”;
$.getJSON(apiUrl,数据=>{
这是我的国家({
priceData:data.map(item=>item.price)
});
});
},
render(){
返回(
{this.state.priceData.map(p=>)}
)
}
});
var PriceColumn=React.createClass({
render(){
返回(
{this.props.price}
)
}
})
ReactDOM.render(对于不受支持的浏览器使用polyfill,或者使用更轻量级的库,如Axios。代码的问题是React组件在接收数据时不呈现,它仅在调用ReactDOM.render且prices当时为空数组时呈现
这样做吧
var App = React.createClass({
getInitialState() {
return {
priceData: []
}
},
componentWillMount() {
const apiUrl = "http://www.asterank.com/api/asterank?query={%22neo%22:{%22$lt%22:%22Y%22},%20%22price%22:{%22$gt%22:100000000}}&limit=1000";
$.getJSON(apiUrl, data => {
this.setState({
priceData: data.map(item => item.price)
});
});
},
render() {
return(
<div className="app">
<div>
{this.state.priceData.map(p => <PriceColumn price={p} />)}
</div>
</div>
)
}
});
var PriceColumn = React.createClass({
render() {
return(
<div>
<h4>{this.props.price}</h4>
</div>
)
}
})
ReactDOM.render(<App />, document.getElementById('container'));
//您也可以使用承诺,而不仅仅是回调参数
回访价格(回拨){
$.getJSON(“),函数(数据){
var result=Object.keys(数据).map(函数(键){
返回数据[键]。价格;
});
回调(结果);
});
}
var App=React.createClass({
getInitialState:函数(){
返回{价格:[]};
},
componentDidMount(){
获取价格(函数(结果){
this.setState({prices:result});
});
},
render(){
返回(
{this.props.priceData.map(p=>)}
);
}
});
var PriceColumn=React.createClass({
render(){
返回(
{this.props.price}
)
}
})
ReactDOM.render(,document.getElementById('container'));
需要使用getIntialState方法,构造函数是es6类语法方法,非常有意义。感谢这帮助我更多地理解了这个概念,我真的很感激。
var App = React.createClass({
getInitialState() {
return {
priceData: []
}
},
componentWillMount() {
const apiUrl = "http://www.asterank.com/api/asterank?query={%22neo%22:{%22$lt%22:%22Y%22},%20%22price%22:{%22$gt%22:100000000}}&limit=1000";
$.getJSON(apiUrl, data => {
this.setState({
priceData: data.map(item => item.price)
});
});
},
render() {
return(
<div className="app">
<div>
{this.state.priceData.map(p => <PriceColumn price={p} />)}
</div>
</div>
)
}
});
var PriceColumn = React.createClass({
render() {
return(
<div>
<h4>{this.props.price}</h4>
</div>
)
}
})
ReactDOM.render(<App />, document.getElementById('container'));
// you can use promises too instead of simply a callback argument
fetchPrices(callback) {
$.getJSON("<api_endpoint>", function(data) {
var result = Object.keys(data).map(function(key) {
return data[key].price;
});
callback(result);
});
}
var App = React.createClass({
getInitialState: function() {
return { prices: [] };
},
componentDidMount() {
fetchPrices(function(result) {
this.setState({ prices: result });
});
},
render() {
return (
<div className="app">
<div>
{this.props.priceData.map(p => <PriceColumn price={p} />)}
</div>
</div>
);
}
});
var PriceColumn = React.createClass({
render() {
return(
<div>
<h4>{this.props.price}</h4>
</div>
)
}
})
ReactDOM.render(<App priceData={prices}/>, document.getElementById('container'));