2017-03-13 19 views
0

目前我的代碼正在離開我放入交換機的任何默認值並且不會改變它。 onValueChange被觸發,我從中得到正確的值,但不管我做什麼,開關移動並返回到默認位置,就像沒有更新狀態。React Native - 開關沒有改變值

主要的代碼,我想用的是這樣一個:

<Switch style={styles.select} value={this.state.banks[rowData.code].status} onValueChange={(newValue) => this.saveValue(rowData,newValue)}/> 


saveValue = (rowData,newValue) => { 
    //var row = rowData[Object.keys(rowData)[0]]; 
    rowData.status = newValue; 
    this._sh.set('@Banks:'+rowData.code,newValue.toString()).then(
     (result) => { 
     this._banks[rowData.code].status = newValue; 
     this.setState({ 
      banks: this._banks 
     }); 
     } 
    ); 
    return newValue; 
    } 

起初我還以爲這是一個非常複雜的狀態的情況,所以我也嘗試了使用外排和一個普通視圖中(交換機而不是數據源)。我也嘗試過使用默認實現,就像在Switch的文檔示例中看到的一樣,並且不起作用。

我想通過iPhone 6s模擬器和真正的5s設備。還是一樣的行爲。

我打算認爲這是一個RN中的錯誤,但沒有找到任何相關的東西,我失去了我的想法,因爲這應該很容易。

最終,我所擁有的是一個帶有銀行列表的JSON文件,用戶可以選擇是否啓用該功能,並且使用該數組存儲這些值並使Switch從該狀態中獲取狀態。 _sh是來自AsyncStorage的StorageHelper包裝器,但我也從代碼中刪除了該部分,仍然是同一個問題。

任何輸入讚賞。

回答

0

嗯,我會被淹沒是因爲我有它在一個ListView中,我正在更新相同的對象,而不是創建一個副本。此代碼的作品:

saveValue = (rowData,newValue) => { 
    //var row = rowData[Object.keys(rowData)[0]]; 
    var banksAux = JSON.parse(JSON.stringify(this.state.banks)); 

    rowData.status = newValue; 
    this._sh.set('@Banks:'+rowData.code,newValue.toString()).then(
     (result) => { 
     banksAux[rowData.code].status = newValue; 
     this.setState({ 
      banks: banksAux, 
      dsBanks: this.state.dsBanks.cloneWithRows(banksAux) 
     }); 
     } 
    ); 
    return newValue; 
    } 

非常醜陋,但顯然我做了一些研究,是要走的路。