对象是否不能作为平板列表中的React子对象?

时间:2018-08-22 18:08:57

标签: reactjs react-native

通常,我可以在Flatlist中渲染对象数组,但是由于某些原因,我这次无法渲染。我收到一个错误消息:“不断违反:对象作为React子对象无效...”有人知道为什么会这样吗?

Debug Assertion Failed!

Program: D:\_extern\Test\Test.exe
File: minkernel\crts\ucrt\src\appcrt\lowio\read.cpp
Line: 259

Expression: static_cast<void const*>(source_buffer) == static_cast<void const*>(result_buffer)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:2)

正如我在评论中所说,FlatList不是问题。问题是<Text>{ allergins }</Text>

您可以:

字符串化allergins(内联)

<Text>{ JSON.stringify(allergins) }</Text>

映射阵列

allergins.map(allergin => <Text>{ allergin.name }</Text>)

您无法在React中渲染对象(即{ name: "Soy", value: "Free From" })。有效的子代是字符串,数字,布尔值,其他元素/组件和(这些类型的)数组。

答案 1 :(得分:0)

因此,看来您正在尝试在Text中渲染对象。它只会接受字符串/数字作为子代。因此,您要做的是: 如果您知道对象的结构(似乎是这种情况),this.renderAllergins应该看起来像这样:

renderAllergins = allergin => (
  <View>
    <Text>{allergin.name}</Text>
    <Text>{allergin.value}</Text>
  </View>
)

另一个选择是渲染对象中的每个键。您将执行以下操作:

renderAllergins = allergin => (
  <View>
    {Object.keys(allergin).forEach((key, value) => (
      <Text>{value}</Text>
    ))}
  </View>
)

答案 2 :(得分:0)

对我来说,toStringJSON.stringify()不起作用,因为我还需要传递包含图像的对象。 所以我做了很简单的事情: 我将{item}放在了<View></View>标签中。

<FlatList 
    data={allergins}
    keyExtractor={(allergin, index) => index}
    renderItem={({allergin}) => (
        <View>this.renderAllergins(allergin)</View> .   //You can try it as well
    )}
/>