ここに私のサンプルコードがあります。ListView
要素をクリックして更新します。アクティブView
は緑色で強調されるべきである。この例ではReactネイティブListViewは状態の変化をクリックして再レンダリングしません
(this.state.selectedField.id==field.id)?'green':'white'
:
この行は、スタイルを定義します。状態はhandleClick()
の内部で更新されていますが、renderField()
メソッドが呼び出されていません。
どのようにリストビューをクリックすることによってトリガされた状態変化に再レンダリングするか?
import React, {Component} from 'react';
import {
AppRegistry,
View,
ListView,
Text,
TouchableOpacity
} from 'react-native';
class SampleApp extends Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
});
this.state = {
fields: ds.cloneWithRows([
{id:0},{id:1},{id:2}
]),
selectedField: {id:0}
};
}
handleClick(field) {
console.log("Selected field:",field);
this.setState({
selectedField: field
});
}
renderField(field) {
return (
<TouchableOpacity onPress={this.handleClick.bind(this, field)} >
<View style={{backgroundColor:(this.state.selectedField.id==field.id)?'green':'white'}}>
<Text style={{left:0, right:0, paddingVertical:50,borderWidth:1}}>{field.id}</Text>
</View>
</TouchableOpacity>
);
}
render() {
return (
<View>
<ListView
dataSource={this.state.fields}
renderRow={this.renderField.bind(this)}
/>
</View>
);
}
}
AppRegistry.registerComponent('SampleApp',() => SampleApp);
はこれを試してみてくださいされています。私はすでにインラインスタイルを使用していますhttp://stackoverflow.com/questions/26882177/react-js-inline-style-best-practices –
、問題は、スタイルをリンクしてクリックなどのイベントを動的にリンクすることです。 –