【问题标题】:How do you access an object with keys as a React child? - React Native作为 React 子节点,您如何使用键访问对象? - 反应原生
【发布时间】:2018-10-30 15:18:48
【问题描述】:

我正在尝试显示此 JSON 数据:

[  
   {  
      "id":"1",
      "imagename":"dog"
   },
   {  
      "id":"2",
      "imagename":"cat"
   },
   {  
      "id":"3",
      "imagename":"mouse"
   },
   {  
      "id":"4",
      "imagename":"deer"
   },
   {  
      "id":"5",
      "imagename":"shark"
   },
   {  
      "id":"6",
      "imagename":"ant"
   }
]

这是我必须显示该数据的当前代码:

 componentDidMount(){
     fetch(`http://www.example.com/React/data.php`, {
     method: 'POST',
     headers: {
       'Accept': 'application/json',
       'Content-Type': 'application/json',
     },
   }).then((response) => response.json())
       .then((responseJson) => {

      this.data = responseJson;
      this.setState({ loading: false });


   }).catch((error) => {
     console.warn(error);
   });

}

     return(

         <View style = { styles.MainContainer }>
          <View>
           <Card>          
              <View>
              <Text>{this.data.id}</Text>
              <Text>{this.data.imagename}</Text>
             </View>
           </Card>
           </View>
         </View>
       );

我的结果是什么都没有显示,但是当我只有 this.data 时,我再次得到带有键的对象错误。

查找类似的答案以找到我的问题,然后我尝试.map,但我不断收到cannot not find variable: i

this.data =  responseJson.map(item => ({ ...item, i }))

最后,这是我尝试的其余代码:

return(

     <View style = { styles.MainContainer }>
      <View>
       <Card>          
          <View key={i}>
          <Text>{item.id}</Text>
          <Text>{item.imagename}</Text>
         </View>
       </Card>
       </View>
     </View>
   );

当我将我的 json 数据放入一个数组时,什么都没有显示,因为(我猜)键之间没有逗号。像这样:

{"id":"1","imagename":"dog"}{"id":"2","imagename":"cat"}{"id":"3","imagename":"mouse"}{"id":"4","imagename":"deer"}{"id":"5","imagename":"shark"}{"id":"6","imagename":"ant"}

如果有人需要查看我的data.php

回声对象

    $dsql = "SELECT * FROM random";

$dresult = $con->query($dsql);

if ($dresult->num_rows >0) {


 while($drow[] = $dresult->fetch_assoc()) {

 $dtem = $drow;

 $djson = json_encode($dtem);


 }

} else {
}
echo $djson;

回声阵列

$dsql = "SELECT * FROM random";

$dresult = $con->query($dsql);

if ($dresult->num_rows >0) {


 while($drow = $dresult->fetch_assoc()) {

 $dtem = $drow;

 $djson = json_encode($dtem);
 echo $djson;

 }

} else {
}

【问题讨论】:

  • 你必须定义索引(i变量)作为map函数的第二个参数,尝试改为:this.data = responseJson.map((item, i) =&gt; ({ //... More logic here }))
  • @ricardoorellana 嗯,我得到了这个:ReferenceError: Can't find variable: i 我也试过这样做:i: responseJson,但我仍然得到错误。

标签: arrays json reactjs object react-native


【解决方案1】:

我可以看到您在 map 函数上传递参数 i 的方式出现错误,请看一下如何使用 map 渲染 &lt;li&gt; 元素的这个简单示例。

var dataSample = [
  { "id": "1", "imagename": "dog" },
  { "id": "2", "imagename": "cat" },
  { "id": "3", "imagename": "mouse" },
  { "id": "4", "imagename": "deer" },
  { "id": "5", "imagename": "shark" },
  { "id": "6", "imagename": "ant" }
];

const App = () => (
  <div>
    <ul>
    {dataSample.map((data, i) => {
        return <li key={i}>{i + ' - ' + data.imagename}</li>
    })}
    </ul>
  </div>
);

ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

【讨论】:

  • 我会在 React Native 中这样做吗?
  • 不,您应该使用有效的 react-native 组件更改 html 元素,例如您的示例。我只是想向你展示一个关于 react 的 map 函数的工作示例。
  • 是的,我只需要问正确的问题。现在我只需要弄清楚如何在我的response.json 中访问id
  • 我明白了,你拥有的 responseJSON 被称为对象数组,因为它是由包含对象的数组组成的。尝试使用map 函数读取时,您是否仍然遇到错误?
  • 哦,好吧,我从来没有理解过这些术语,而且现在没有一切正常。我只需要使用this.state 访问数组中的对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多