2017-08-25 42 views
0

我试图在我的组件中编写render时返回一些html标签。像这样的代码:React组件运行错误.Uncaught错误:缩小了React错误#31

import React, {Component} from 'react'; 
import Request from 'react-http-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); 
    var json = "{\"law\":\"军工企业股份制改造实施暂行办法\",\"character\":\"第二章\"}"; 

    var test = JSON.stringify(<Fetchs args={json}/>); 


    var request = new XMLHttpRequest(); 
    request.open('POST', 'http://localhost:8080/path', false); 
    request.setRequestHeader('Content-Type', 'application/json'); 
    var resp = ''; 
    request.onreadystatechange = function (e) { 
     if (this.status == 200) { 
      resp = this.response; 
     } 
    } 

    request.send(json); 

    // console.info("XMLHttpRequest test is " + JSON.stringify(resp)); 

    // console.info("test is " + resp); 

    this.setState({result: resp}); 

    event.preventDefault(); 
} 


render() { 

    // console.log("prite"+this.state.result.queryResults); 
    // console.log("100"+this.strToJson(this.state.result)); 
    // console.log("200"+this.strToJson(this.state.result.queryResults)); 
    // alert(this.state.result); 

    var parse = JSON.parse(this.state.result ? this.state.result : null); 
    var out = parse ? parse.queryResults : null; 
    for (var i = 0; out != null && i < out.length; i++) { 
     if (out[i].keyword == null) { 
      out[i].keyword = "{}"; 
      console.info("keyword is null"); 
     } 
     else { 
      // this.state.result.queryResults.keyword 
      console.info("keword is not null"); 
      out[i].keyword = JSON.stringify(out[i].keyword); 
     } 
    } 


    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 border="10" > 
       <tr> 
        <thead> 
        <th>GraphName</th> 
        <th>Relation</th> 
        <th>Content</th> 
        <th>KeyWord</th> 
        </thead> 
       </tr> 
       <tbody> 

       {out} 
       </tbody> 
      </table> 

     </div> 
    ); 
} 
} 


ReactDOM.render(<NameForm/>, document.getElementById('react')) 

out是JSON数据解析的阵列,像这样:

enter image description here

我的问题是,我想通过table标签显示页out,但使用{out}我得到一个错误,像这样: enter image description here

什么困扰着我是如何显示out阵列在一张桌子里。

+0

做错误所说的内容,并在开发时使用未反应的反应版本。你的错误告诉我们,几乎没有什么地方出了错 – TheRealMrCrowley

+0

你也需要用数据来包装你的表头行中的THEAD – TheRealMrCrowley

+0

最后,表中的行不是在'td'是无效的HTML – TheRealMrCrowley

回答

1

我相信你的麻烦可能是由于你尝试在你的反应渲染方法中返回对象数组而引起的,而不是尝试映射你的对象并在<p></p>标记中插入必要的字段。 例如:

out.map(
    (object) => <p>object.content</p> 
) 

等等 希望它能帮助!

+0

非常感谢,它的工作原理。 –

+1

顺便说一下,在这种情况下,您实际上可能不需要检查这是否为空或者不是更好,而是从您的服务器返回空数组,并且您将在空数组上使用映射时,它将只显示nnothing,我的意思是更好在设置状态之前检查是否为null,所以渲染methot不会被条件代码污染 –