Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复基于JSON响应填充React组件的问题?_Javascript_Jquery_Json_Reactjs - Fatal编程技术网

Javascript 如何修复基于JSON响应填充React组件的问题?

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

每次尝试访问此区域中的数据点时,都会出现未定义的情况。谢谢你的帮助

$.getJSON是异步的,因此在React.render方法中使用prices时,没有执行回调。更好的方法是让组件本身负责调用,并将返回的价格存储在回调状态。例如

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'));