【问题标题】:Getting type error undefined object in react native?在本机反应中获取类型错误未定义对象?
【发布时间】:2018-10-01 09:47:56
【问题描述】:

我试图在 render() 中输出数据,但出现错误,为什么会这样?

代码:

render() {

        let marketing_plan_projects = [];

        marketing_plan_projects = this.props.markets.data ? this.props.markets.data : null;
        let marketing_updates = get_marketing_updates_from_projects(marketing_plan_projects);

        console.log(marketing_updates);

        return (
            <ScrollView style={styles.container}>

                <Text>{marketing_updates[0].project_name}</Text>

            </ScrollView>
        );
    }

我也试过这个:(仍然报错)

&lt;Text&gt;{marketing_updates ? marketing_updates[0].project_name: ""}&lt;/Text&gt;

console.log(marketing_updates) 是:

我收到以下错误:

【问题讨论】:

  • 你确定你的 marketing_updates 对象不为空吗?
  • @R.Duteil 最初它是空的(见屏幕截图),但随后发生重新渲染,因此它被填充。
  • 您的错误被抛出,因为起初您有一个空数组。 react-native 无法知道在某些时候您实际上会在那里拥有数据。你可以做一些你已经尝试过的修改:&lt;Text&gt;{marketing_updates &amp;&amp; marketing_updates.length &gt; 0 ? marketing_updates[0].project_name: ""}&lt;/Text&gt;
  • @AndreiOlar 工作就像一个魅力谢谢:)

标签: javascript reactjs react-native


【解决方案1】:

这一行:

marketing_updates ? marketing_updates[0].project_name: ""

不测试数组是否为空,而只测试它是否存在。测试 marketing_updates = [] 将返回 true,因为它是一个真实值

更多信息请看这里:https://developer.mozilla.org/en-US/docs/Glossary/Truthy

因此,您可以拥有一个现有数组,但 marketing_updates[0] 的值未定义,因为它可能为空。

为避免您的错误,请尝试以下操作:

marketing_updates.length != 0 ? marketing_updates[0].project_name: ""

【讨论】:

  • 如果我想将数据注入 FlatList 我该怎么做?这是正确的 -> data={marketing_updates &amp;&amp; marketing_updates.length &gt; 0 ? marketing_updates[0].project_name: null }
  • 如果至少有一个元素,这将发送marketing_updates的第一个元素的project_name,否则为null。
  • 这取决于您需要作为数据传递给您的 FlatList 的内容。如果你需要第一个元素的project_name,那么是的,这是正确的方式
猜你喜欢
  • 2017-09-28
  • 2019-07-30
  • 2019-10-05
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 2021-05-22
  • 2019-05-08
相关资源
最近更新 更多