2017-09-18 82 views
0

我試着保存一個數組,我試圖按照文檔,但失敗慘敗。我應該如何寫它,以便它不會給我各種警告和錯誤。AsyncStorage反應本機保存數組

錯誤:

  • 有一個[對象對象]當我嘗試設置的項目
  • 得到了一個對象,而不是一個數組
  • 試圖將分配給只讀屬性
  • 預計一個字符串,得到一個數組

這裏是代碼:App.js

import React from 'react'; 
 
import { StyleSheet, Text, View, TextInput, ScrollView, TouchableOpacity, KeyboardAvoidingView, AsyncStorage } from 'react-native'; 
 
import Note from './app/components/note'; 
 

 
export default class App extends React.Component { 
 

 
    state = { 
 
    noteArray: [], 
 
    noteText: '', 
 
    } 
 

 
    render() { 
 

 
    let notes = this.state.noteArray.map((val, key) => { 
 
     return <Note key={key} keyval={key} val={val} deleteMethod={()=>this.deleteNote(key) } /> 
 
    }); 
 

 
    return (
 
     <KeyboardAvoidingView behavior="padding" style={styles.container}> 
 

 
     <View style={styles.header}> 
 
      <Text style={styles.headerText}>Tasker</Text> 
 
     </View> 
 

 
     <ScrollView style={styles.scrollContainer}> 
 
      {notes} 
 
     </ScrollView> 
 

 
     <View style={styles.footer}> 
 
      <TouchableOpacity onPress={this.addNote.bind(this)} style={styles.addButton}> 
 
      <Text style={styles.addButtonText}>+</Text> 
 
      </TouchableOpacity> 
 

 
      <TextInput style={styles.textInput} placeholder='Enter Task...' placeholderTextColor='white' 
 
      underlinedColorAndroid='transparent' onChangeText={(noteText) => this.setState({noteText})} 
 
      value={this.state.noteText}></TextInput> 
 
     </View> 
 

 
     </KeyboardAvoidingView> 
 
    ); 
 
    } 
 

 
    addNote() { 
 
    if (this.state.noteText) { 
 
     var d = new Date(); 
 
     this.state.noteArray.push({'date' : d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate(), 'note' : this.state.noteText}); 
 
     this.setState({noteArray: this.state.noteArray}); 
 
     this.setState({ noteText: '' }); 
 
    } 
 

 
    
 
    //AsyncStorage.setItem() How do I write it so no errors occur 
 
    alert({noteArray: this.state.noteArray}) 
 
    }

額外注:該錯誤是對世博會應用在手機上Android和iOS的

提前

謝謝!

+0

'addNote()'是錯誤的。你應該認爲這個狀態是不可改變的。製作一份副本並修改副本,然後使用副本'setState'只複製一次。 –

+0

我該怎麼做?請你能提供一些指導或代碼嗎?即時通訊仍然是這個 –

+1

谷歌的菜鳥?這裏是[一](https://github.com/facebook/immutable-js/wiki/Immutable-as-React-state) –

回答

1

數組和其他對象需要保存爲AsyncStorage中的字符串。

AsyncStorage.setItem('arrayObjKey', JSON.stringify(myArray)); 

此外,如果你需要更新數組中的值,用AsyncStorage.multiMerge

從陣營本地文檔:

融合了輸入值的現有鍵值,假設兩個值被串化JSON。返回一個Promise對象。

+0

我可以建議的唯一的改進是包括一些OP的(原始海報)代碼展示它如何適合他們的榜樣,因爲他/她提到他們是初學者。 – ContinuousLoad