通过AsyncStorage React-native输入数据时出错

时间:2019-05-12 12:49:39

标签: javascript reactjs react-native asyncstorage

尝试放入购物车系统的数据时出现错误。

尝试[json];时可以放置数据,但是将其更改为[...json];时不能放置数据

[json];给了我我放的最后一个物品,但我需要所有这些物品

addCart=()=>{



  const sepets = AsyncStorage.getItem("sepet")
   .then(req => {
   const json =  JSON.parse(req); 
   const sepet=[...json];
   sepet.push({isim:this.props.title,fiyat:this.props.fiyat,image:this.props.image});

   AsyncStorage.setItem("sepet",JSON.stringify(sepet));


   });




    }

给我的错误“可能未处理的承诺被拒绝(id:0): TypeError:散布不可迭代实例的无效尝试 TypeError:散布不可迭代实例的无效尝试     在_nonIterableSpread“

我要删除这样的项目         导出默认类aksiyos扩展了React.Component {

        constructor(props) {
        super(props);
        this.state = {
          ApiTitle: [],
        }
      }

          componentDidMount() {


       var sepet=AsyncStorage.getItem("sepet").then(req=>JSON.parse(req)).then(json=>{

      this.setState({ApiTitle: json });


       });




      }

      removeCart=()=>{

        AsyncStorage.removeItem("sepet")
      }
        render() {
        return (
          <View style={{backgroundColor: "white"}}>
          <ScrollView>{this.state.ApiTitle.map((ids, i)=>

            <Text>{ids.isim}</Text>


    )}
            </ScrollView>
                            <Text onPress={this.removeCart}>Buton</Text>
            </View>
        );
      }
     }

`

1 个答案:

答案 0 :(得分:0)

解析数据时,您不需要多余的.then()。您还需要检查是否为空,删除项目后,getItem将返回空。

const sepets = AsyncStorage.getItem("sepet")
 .then(req => {

 let json =  JSON.parse(req);

 if (!json) {
   json = [];
 }

 const sepet=[...json];
 sepet.push({isim:this.props.title,fiyat:this.props.fiyat,image:this.props.image});

 AsyncStorage.setItem("sepet",JSON.stringify(sepet));

 console.log(sepet)

 });

在渲染中验证ApiTitle,然后再使用它。

render() {

  const items = this.state.ApiTitle || [];

  return (
    <View style={{ backgroundColor: "white" }}>
      <ScrollView>{items.map((ids, i) =>
        <Text>{ids.isim}</Text>
      )}
      </ScrollView>
      <Text onPress={this.removeCart}>Buton</Text>
    </View>
  );
}