首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为道具传递时,响应获取返回的__proto__对象

作为道具传递时,响应获取返回的__proto__对象
EN

Stack Overflow用户
提问于 2020-07-14 18:12:19
回答 1查看 540关注 0票数 0

当我将获取的数据传递给支持时,它会在组件中返回一个额外的proto对象。在将数据传递给支持之前,当我用componentDidMount()记录数据时,它会返回我希望使用的正确的单一对象格式。但是,当我把它作为道具传递下来时,它会返回两个对象。一个带有proto,另一个是正确格式化的对象。

如何将单个对象格式传递给道具?

Api端点

代码语言:javascript
复制
export const fetchWorldData = async () => {
  try {
    const response = await axios.get(worldData);
    return response;
  } catch (error) {
    console.log(error);
  }
};

App.js -将获取数据设置为状态对象并将其传递给道具

注意:回调中的console.log

代码语言:javascript
复制
import React from 'react';
import { WorldDisplay } from './components';
import { fetchWorldData } from './api';


class App extends React.Component {
  state = {

    worldData: {},

  };


  async componentDidMount() {

    const fetchedWorldData = await fetchWorldData();

    this.setState(

      {

        worldData: fetchedWorldData,

      }, () => { 

      //Callback returns correctly formatted data

      console.log(fetchedWorldData);

      }
    );
  }

  render() {
    const {worldData} = this.state;

    return (
      <div>
   // pass data as props to WorldDisplay component
        <WorldDisplay data={worldData} />

      </div>
    );
  }
}

export default App;

正确的单目标格式的Console.log

具有获取数据支持的组件。

代码语言:javascript
复制
import React from 'react';

const WorldDisplay = (data) => {
// console.log returns two objects, one __proto__ one correctly formatted
  console.log(data);

  return (
    <div>
      <h1>Hello Wold</h1>
    </div>
  );
};

export default WorldDisplay;

不想要的两个对象的console.log

虽然我尝试过console.log(data.data.data)并在WorldDisplay组件中进行析构,但它返回了第一个proto对象上的未定义对象,而且我无法导航第二个正确的对象,因为它引用的是两个具有不同响应体的对象。这里我的意图是只返回第二种正确的格式,这样我就可以正确地导航它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 18:46:49

好的,如果每次状态变化时调用React组件的呈现方法。因此,场景后面发生的情况是,状态属性worldData最初是空对象,WorldDisplay组件以空对象作为worldData支柱。fetchWorldData是一个异步fn,所以当它返回结果时,它将更新状态属性worldData;这再次触发render方法。如果要避免呈现子组件是worldData对象为null或未定义,则可以使用三元运算符有条件地呈现它。

代码语言:javascript
复制
{worldData? <WorldDisplay data={worldData} /> : <></>}

并且必须将状态变量worldData的初始值设为null

顺便说一句,您不必将您的componentDidMount作为异步;因为fetchWorlddata函数本身就是一个异步方法。你可以把它重写为

代码语言:javascript
复制
  componentDidMount() {

    const worldData = fetchWorldData();

    this.setState(

      {

        worldData //Feature of ES6, this is equivalent to worldData : worldData 

      }, () => { 

      //Callback returns correctly formatted data

      console.log(fetchedWorldData);

      }
    );
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62901444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档