首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电容储能内部更新值

电容储能内部更新值
EN

Stack Overflow用户
提问于 2021-09-16 17:06:34
回答 1查看 484关注 0票数 0

以下情况:

我有一个Ionic React应用程序,我用它来拍照,然后用它的归属信息保存照片。我获取所有现有数据(在拍照时),并使用电容存储API Storage.set()保存它。如果我console.log()存储有2张照片,它看起来如下所示:

代码语言:javascript
复制
[{"filepath":"file:///storage/emulated/0/Documents/1631810178839.jpeg","latitude":52.09244,"longitude":15.099145,"time":"9/16/2021, 4:35:49 PM","park":""},{"filepath":"file:///storage/emulated/0/Documents/1631796536758.jpeg","latitude":52.09244,"longitude":15.099145,"time":"9/16/2021, 2:48:24 PM","park":""}]

照片显示在某种列表中。每个对象都有2列。左列显示照片,右边列包含其他信息,如日期、位置和公园下拉列表。

我被困的地方:

我想更新park的值。park需要在保存照片后添加/更改,因为它的值应该由用户通过选择表单来选择,因此在第一次保存时没有定义。但是这张照片需要在拍照后保存下来,当然,它没有显示在应用程序中。

到目前为止我尝试过的是:

我的想法是添加一个空的park,以便以后能够更新它。所以我想通过Storage.get()读取存储中的对象,然后比较我正在选择的对象的文件路径和存储中每个对象的文件路径。匹配之后,空的park应该与所选的值交换。然后,使用更新的Storage.set()值的数组进行Storage.set()

代码块:

代码语言:javascript
复制
class Park extends React.Component {
    constructor(props) {
      super(props);
      this.state = {park: ""};
  
      this.handleChange = this.handleChange.bind(this);
    }
  
    async handleChange(e) {
      this.setState({
        park: e.target.value
      });
      
      const {value} = await Storage.get({key: 'test' });
      var item = value.find(x => x.filepath == this.props.photoPath);

      if (item) {
        item.park = this.state.park;
      }

      Storage.set({key: 'test', value: value})
    }
  
    render() {
      return (
          <IonItem>
              <IonLabel position="stacked">Parks</IonLabel>
              <IonSelect name="park" value={this.state.park} placeholder="Choose park" onIonChange={this.handleChange}>
                  <IonSelectOption value="park1">Park1</IonSelectOption>
                  <IonSelectOption value="park2">Park2</IonSelectOption>
                  <IonSelectOption value="park3">Park3</IonSelectOption>
              </IonSelect>
          </IonItem>
      );
    }
  }

export default Park

FYI this.props.photoPat从父级传递,并给出属于select表单的照片的文件路径。

但是,由于我试图从存储中获取数据的方式,这并不能正常运行。find函数不起作用:

属性'find‘在’string‘..ts(2339)

中不存在

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 13:43:50

最后很简单..。find()只处理数组,而Storage.get()则返回一个字符串。因此,您必须对字符串进行parse()以获得数组,然后可以成功地使用find()-function。

代码语言:javascript
复制
  class Park extends React.Component {
    
    async handleChange(target) {

      const {value} = await Storage.get({key: 'park' });
      let array = JSON.parse(value)
      let index = array.findIndex((array) => array.filepath === this.props.photoPath)
      if(index !== -1) {
        array[index] = {
            filepath: array[index].filepath,
            park: target
          }
      } else {
          console.log("error")
      }
      Storage.set({key: 'park', value: JSON.stringify(array)})

    }
  
    render() {
      return (
        <IonItem>
          <IonLabel position="stacked">Parks</IonLabel>
          <IonSelect name="park" value={this.props.park} placeholder="Bitte wählen" onIonChange={e => this.handleChange(e.detail.value)}>
              <IonSelectOption value="park1">Park1</IonSelectOption>
              <IonSelectOption value="park2">Park2</IonSelectOption>
              <IonSelectOption value="park3">Park3</IonSelectOption>
          </IonSelect>
      </IonItem>
      );
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69212509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档