2017-03-13 2 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 파일이 있으며 그 배열을 사용하여 값을 저장하고 스위치에서 상태를 가져옵니다. . _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; 
    } 

매우 못생긴하지만 명백하게 나는 약간의 연구를했으며 갈 길이 멀다.

관련 문제