【问题标题】:Reactjs error, objects are not valid as react child?Reactjs 错误,对象作为反应子无效?
【发布时间】:2017-12-16 18:03:32
【问题描述】:

我在前端使用 reactjs,后端使用 nodejs。我通过这段代码调用我的后端(localhost:3001/api/tunes):

componentDidMount(){
    fetch("/api/itunes")
    .then((results)=>{
        this.setState({queryResult:results});
    })
}

此代码应该返回一个字符串值,我将其分配给本地状态变量 queryResult。我不明白为什么代码给出错误 - 对象不是有效的反应子。

我的渲染函数:

render(){
            return(
                <div>
                    <form class="form-inline my-2 my-lg-0">
                        <input class="form-control mr-sm-2" type="search" placeholder="Search" 
                        value={this.state.queryValue} onChange={this.handleQueryChange} />
                        <button class="btn btn-outline-success my-2 my-sm-0" type="submit"
                        onClick={this.submitQuery}></button>
                    </form>

                    <div>{this.state.queryResult}</div>
                </div>

        );
}

这是我从我的服务器得到的:

router.get('/api/itunes',(req,res,next)=>{
    request('https://itunes.apple.com/search?term=jack+johnson', 
function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // console.log(body) // Print the google web page.
        var result =JSON.parse(body);
        res.send(result.results[0].artistName);
        }
    });
});

【问题讨论】:

  • 请显示渲染方法
  • 您不能只呈现来自 API 的响应。您必须将其映射到各个元素。
  • 您正在尝试渲染&lt;div&gt;{this.state.queryResult}&lt;/div&gt;,因此您收到此错误,您需要映射您的响应并渲染它
  • 即使结果是字符串,也不能只赋值给局部状态变量?
  • @ASHUTOSHCHANDRA 从错误信息来看,这不是一个字符串。

标签: node.js reactjs


【解决方案1】:

您正在尝试渲染 this.state.queryResult 的整个对象。

React 无法渲染对象。您必须将其转换为字符串或必须从对象中提取每个值。

您可以使用{console.log(this.state.queryResult)} 轻松检查这一点

【讨论】:

  • 你能建议如何正确地做到这一点,从api返回的值是一个字符串。
  • {JSON.stringify(this.state.queryResult)} 但这不是您必须从对象中提取每个属性并打印的适当方法
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2021-10-19
相关资源
最近更新 更多