3

ListView反応ネイティブで使用しています。ListViewそして、機能ごとにアップデートしたいので、このように使いthis.setStateました。

<Button onPress={()=>this.setState({word:this.state.word})}>Btn</Button>

ボタンを押した後、render()メソッドは機能しますが、renderRowメソッドは機能しません。だからうまくいきListViewません。どうすれば解決できますか?

これが私のListViewです

<ListView
    datasource={this.state.dataSource}
    renderRow={this._renderRow.bind(this)}/>

そして私の_renderRow

_renderRow(param){
    return(
        <View>{param.word.includes(this.state.word)&&<Text>{param.word}</Text>}</View>
    );
}

ボタンを押したときにリストビューを更新したいのですが、param.wordにthis.state.wordが含まれているリストが表示されます

4

2 に答える 2

0

ListView コンポーネントの必要な ListViewDataSource プロパティの cloneWithRows 呼び出しをお見逃しなく。 ドキュメントには次のように記載されています。

データソース内のデータを更新するには、cloneWithRows (セクションを気にする場合は cloneWithRowsAndSections) を使用します。データ ソース内のデータは不変であるため、直接変更することはできません。clone メソッドは新しいデータを取り込み、各行の差分を計算するので、ListView はデータを再レンダリングするかどうかを認識します。

コンストラクターで DataSource を初期化した場合:

constructor(props) {
    var ds = new ListView.DataSource({ rowHasChanged: (r1,r2) => r1 !== r2});
    this.state = { datasource: ds.cloneWithRows(['A', 'B', 'C']) };
}

更新関数は次のようになります。

fetchData() {
    //... fetching logic
    var items = ['D', 'E', 'F'];
    this.setState({
        dataSource: this.state.dataSource.cloneWithRows(items)
    });
}
于 2016-05-24T09:45:24.950 に答える