0
私のプロジェクトでは、私のListViewの背景色を変更しようとしています。 色は既に配列の内側にあり、コンポーネントの内側には山が表示されます。最初にrand番号を取得するため、ユーザーはコンポーネントを開くたびに異なる色で開始します。ListViewダイナミックスタイリング反応ネイティブ
renderRowが呼び出されるたびに、どのように色の状態を変更しますか。
constructor(props){
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
color: null,
}
}
componentWillMount() {
var rand = Math.floor((Math.random()*8)+1);
this.setState({ color: rand});
}
_renderRow (rowData, rowId, rowColumn) {
var temp=(this.state.color+1)%8;
this.setState({color: temp});
return (
<View style={{ backgroundColor: backColor[temp] ,paddingVertical: 10, paddingHorizontal: 10, marginBottom: 10, borderRadius: 5 }}>
<Text>{rowData.name}</Text>
</View>
)
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow.bind(this)}
style={styles.mainContainer}
/>
);
}
}
誰もが正しい方向に私を指すことができます..私はSETSTATEを追加しようとするが、それは最大コールスタックエラーを引き起こしますか?私はアンドリューが提案どのような以下のよ基本的に
問題は、すべての行が 'color'の同じ参照を使用しているので、ある行がそれを変更すると、子行は再レンダリングする必要があり、その際に' color'も変更する必要があります。 '_renderRow'コンポーネントを、親からの静的な入力に基づいて独自の色を管理する適切なサブコンポーネントに移動すると、問題が解決されます。 –
オハイオ州..私は参照してください。大丈夫..あなたが示唆したように私はしようとします。ありがとうございました! –