【问题标题】:Not able to use map function react-native无法使用地图功能 react-native
【发布时间】:2018-08-09 18:07:48
【问题描述】:

我是本机反应的新手,我正在使用异步存储来存储对象,然后通过将它们存储在收藏夹数组中进行解析。我正在尝试映射数组中的每个元素并显示它。

我收到此错误:this.state.favorites.map 不是函数。 我认为这是一个状态错误,但由于我对这些概念不熟悉,我不知道如何解决它。请帮忙。

import React, {Component} from 'react';
import {StyleSheet, Text, View, Image,  FlatList, Button, AsyncStorage, 
TouchableOpacity} from 'react-native';
import ajax from './ajax.js';
import PropTypes from 'prop-types';
import InspirationList from './InspirationList';
import FavoriteItem from './FavoriteItem';
import ProductItem from './ProductItem';


class Favorites extends Component{
    state = {
        favorites:[],
      };

componentDidMount(){
    this.showProduct();
  }

    async showProduct() {
        let k=0;
        AsyncStorage.getAllKeys()
            .then(keys => AsyncStorage.multiGet(keys)
            .then((result) => {
                result.map(req => req.forEach((element) => {
                    k++;
                    if(element!=null && k%2==0){
                    this.setState({favorites: JSON.parse(element) });
                    console.log(this.state.favorites.nume);
                     }
                  }));       
            }));
        };

  render(){
    return(
    <View style='styles.fav'>
        {this.state.favorites.map((fav)=>
            <Text>{fav.nume}</Text>
        )}
    </View>
    );
  }
}

const styles = StyleSheet.create({  
 fav:{
     backgroundColor:'#999',
     flex:1,
     width:'100%',
     paddingTop:150,
 }
});

export default Favorites;

【问题讨论】:

    标签: arrays json react-native state setstate


    【解决方案1】:

    在您的 showProduct 函数中,您将覆盖您最初的状态。分配 JSON.parse(element) 时,您正在更改状态,而不是让数组将其转换为对象,这就是您收到该错误的原因。 map 仅存在于类数组中。

    所以也许你可以这样做:

    async showProduct() {
            let k=0;
            AsyncStorage.getAllKeys()
                .then(keys => AsyncStorage.multiGet(keys)
                .then((result) => {
                    result.map(req => {
                      let result = [];
                      req.forEach((element) => {
                        k++;                        
                        if(element!=null && k%2==0){
                          result.push(JSON.parse(element))
                        }
                        });
                      this.setState({favorites: result });}
                  );       
                }));
            };
    

    【讨论】:

    • 非常感谢您的帮助。显然,您提供的语法不正确。我在 let result=[] 上遇到语法错误。我试图将 let 声明移到顶部,其中 let k=0 是。如果我这样做,我会得到一个包含两倍对象的数组。前半部分包含对象字符串,另一半包含对象。
    • 你知道我该如何解决这个问题吗?我想避免重复,因为我收到“重复键”的错误。谢谢
    • 对不起,我没有仔细检查,问题是缺少打开和关闭花括号,以便回调传递给map 函数。我再次编辑答案,您可以尝试使用实际代码吗?
    • 您还可以查看react-native multiget docthis 的问题,该问题来自询问如何管理来自multiget() 的回复。
    • 没问题,它也对我有帮助。很高兴我能帮助你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多