React Native - 切换不改变值

时间:2017-03-13 23:31:32

标签: ios react-native

目前我的代码正在保留我放入Switch的默认值,而不是更改它。 onValueChange被触发,我从中获取正确的值,但无论我做什么,开关都会移动并返回到默认位置,就像没有更新状态一样。

我想要使用的主要代码是:

 <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。我也尝试使用默认实现,如Switch的文档示例中所示,并且也不起作用。

我正在尝试使用iPhone 6s模拟器和真正的5s设备。还是一样的行为。

我即将认为这是RN中的一个错误,但没有找到任何相关的东西,我正在失去理智,因为这应该是非常容易的。

最终,我所拥有的是一个带有银行列表的JSON文件,用户可以选择是否需要启用,我使用该数组存储值并使Switch从那里获取状态。 _sh是来自AsyncStorage的StorageHelper包装器,但我也从代码中删除了该部分,但仍然是同一个问题。

任何意见都表示赞赏。

1 个答案:

答案 0 :(得分: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;
  }

非常难看,但显然我做了一些研究,并且是要走的路。