0
まず最初に、いくつかの同様の質問があることを認識していますが、答えのどれも助けていません。react-native:状態変更時にListViewの行を再レンダリングします
とにかく、私は単純なリストビューを持っています。特定の行をクリックすると、いくつかの異なるスタイルとコンテンツを追加したいと思います。
私はstate.selected_row
を設定し、この再
_renderRow
で選択された行が何であるかを判定し、スタイリングが、私はそれを作ることができるか、適切に適用されますが、何らかの理由
_renderRow
のためにのみレンダリング初期に呼ばれて、ビューをレンダリング
_pressRow
で
毎回更新し、なぜこれはまだ起こっていないのですか?
私はそれが一緒にいくつかの異なる答えを貼り付けて作業してしまったvar List = React.createClass({
getInitialState: function() {
var ds = new React.ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
return {
dataSource: ds.cloneWithRows(some_data),
loaded: false,
selected_row: null,
}
},
_renderRow: function(rowData, sectionID, rowID) {
var selected = (this.state.selected_row == rowID)
return (
<React.View
style={selected ? styles.row_expanded : row_styles.row}
onPress={() => this._pressRow(rowID)>
</React.View>
)
},
_pressRow: function(rowId){
this.setState({
selected_row: rowId,
});
},
render: function() {
return <React.View>
<React.ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow}
style={styles.container}
/>
</React.View>
}
});
こんにちは、あなたは解決策をJSフィドルを作ることができますか?私は同じことにこだわった –
@PrateekRathore JS Fiddleは助けにならない、これはReact Native固有の問題で、js fiddleでネイティブ環境を実行することはできません。特にあなたの問題は何ですか?とにかくここでのソリューションは非常にシンプルで、古いデータソースを新しいオブジェクトにコピーしてからcloneWithRowsに渡すだけです。 – AllTheTime
ありがとうございます、あなたのソリューションは実行可能なようです。まずそれを試してみよう。 –