我試圖創建一個Fetch
組件,它應發送POST請求返回響應內容。同時我創建了一個NameForm
組件,它生成一個數據給Fetch
組件發送請求。我的問題是,當我使用this.state.result.queryResults[0]
,我在這樣的鍍鉻得到了一個錯誤:React.js組件運行error.Uncaught TypeError:無法讀取未定義的屬性'0'
這裏是我的js代碼:
import React, {Component} from 'react';
import Request from 'react-http-request';
class Fetch extends React.Component {
constructor() {
super();
}
render() {
return (
<Request
url='http://localhost:8080/path'
method='post'
accept='application/json'
type="application/json"
send={this.props.args}
verbose={true}
>
{
({error, result, loading}) => {
if (loading) {
return <div>loading...</div>;
} else {
return <div>{result.text}</div>;
}
}
}
</Request>
);
}
}
class NameForm extends React.Component {
constructor() {
super();
this.state = {value: '', result: []};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
var content = this.state.value;
var split = content.split(/\s+/);
var queryObject = new Object();
queryObject.law = null;
queryObject.character = null;
queryObject.lawRule = null;
if (split.length == 1) {
queryObject.law = split[0];
}
else if (split.length == 2) {
queryObject.law = split[0];
queryObject.character = split[1];
}
else if (split.length > 2) {
queryObject.law = split[0];
queryObject.character = split[1];
queryObject.lawRule = split[2];
}
var json = JSON.stringify(queryObject);
this.setState({result: (<Fetch args={json}/>)});
event.preventDefault();
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange}/>
</label>
<input type="submit" value="Submit"/>
</form>
<table>
<thead>
<tr>
<th>GraphName</th>
<th>Relation</th>
<th>Content</th>
<th>KeyWord</th>
</tr>
</thead>
<tboy>{this.state.result.queryResults[0]}</tboy>
</table>
</div>
);
}
}
ReactDOM.render(<NameForm/>, document.getElementById('react'))
而且我的帖子的反應是這樣的JSON:
{
"path": {
"law": "MyLaw",
"character": "C1",
"lawRule": null
},
"queryResults": [
{
"graphName": "MyLaw/C1",
"relation": "self",
"content": "I am C1",
"keyword": {
"a": 0.4296310331415849,
"b": 0.22019926949447058,
"c": 0.16514945212085294,
"d": 0.16514945212085294,
}
},
{
"graphName": "MyLaw/C1/C1.1",
"relation": "child",
"content": "I am C1.1",
"keyword": null
},
{
"graphName": "MyLaw/C1/C1.2",
"relation": "child",
"content": "I am C1.2",
"keyword": null
},
{
"graphName": "MyLaw/C1/C1.3",
"relation": "child",
"content": "I am C1.3",
"keyword": null
},
]
}
什麼的了,當你做'的console.log(this.state.result)把' – abdul
可能的獲取由或狀態更新之前的組件安裝。所以如果狀態沒有設置,錯誤是可以預料的。我建議你做一個檢查以確保結果存在。這樣的東西 'this.state.result?this.state.result.queryResults [0]:「」' – abdul
輸出是一個對象,但不包含'queryResults',我用'this.state.result? this.state.result.queryResults [0]:「」'和頁面正在記錄。但是當我使用' {this.state.result} '時,頁面顯示json數據。 –