私は複数選択モーダルを構築しています。ユーザーが項目を押すと、項目は「チェック済み」とマークされます。FlatList項目は更新されません)
問題 Iは、IDアレイから/除去IDを追加しました。私が開いてモーダルをチェックすると、「チェック」サインは表示されません。しかし、モーダルをもう一度閉じて開くと、「チェック」サインが表示されます。
選択した項目を追跡するために、私は、モーダル・コンポーネントの状態の項目を定義しました。ここ
state = {
selectedSeasonIds: this.props.selectedSeasonIds,
}
が反応ネイティブモーダルIこれは、各項目
_renderItemForMultiple = ({item}) => {
return (
<TouchableOpacity
style={styles.itemStyle}
onPress={() => {this._handleMultipleItemPress(item.id)}}>
<RkText>{item.value}</RkText>
{ this._renderCheck(item.id) } <<< Here is the problem
</TouchableOpacity>
);
}
ユーザーが項目をクリック
する機能をレンダリングある<Modal
isVisible={isSelectorVisible}
onBackdropPress = {() => this.props.hideSelector()}>
<View style={styles.modalContainer}>
<FlatList
style={styles.root}
data={this.props.items}
ItemSeparatorComponent={this._renderSeparator}
keyExtractor={this._keyExtractor}
renderItem={this._renderItemForMultiple}/>
</View>
</Modal>
画面にモーダルを表示するために使用され、フラットリストのアイテムコール_handleMultipleitemPress
_handleMultipleItemPress = (id) => {
let { selectionType } = this.props;
let { selectedSeasonIds, selectedSizeIds, selectedColorIds } = this.state;
if(selectionType===2) {
if(_.includes(this.state.selectedSeasonIds, id)) {
let newSelectedSeasonIds = _.filter(this.state.selectedSeasonIds, (curObject) => {
return curObject !== id;
});
this.setState({selectedSeasonIds : newSelectedSeasonIds});
} else {
let newSelectedSeasonIds = [...this.state.selectedSeasonIds, id];
this.setState({selectedSeasonIds : newSelectedSeasonIds});
}
}
// season Select Action
this.props.seasonSelectAction(id);
}
通報我々は、IDアレイから/除去IDを追加しました。私が開いてモーダルをチェックすると、「チェック」サインは表示されません。しかし、モーダルをもう一度閉じて開くと、「チェック」サインが表示されます。
でも、setState
をrenderCheck()
にしても、モーダルはレンダリングされません。なぜそれが起こっているのですか?そしてそれをどうやって修正できますか?
_renderCheck = (id) => {
let { selectionType, selectedSeasonIds, selectedSizeIds, selectedColorIds } = this.props;
if(selectionType===2) {
if(_.includes(this.state.selectedSeasonIds, id)) {
return (<RkText>Check </RkText>);
}
}
return (<RkText> </RkText>);
}
その他のアドバイスもあります。このポストを読んでくれてありがとう。
UPDATE私はコードでデバッグしましたが、アイテムを押すと_renderItemForMultiple
は通過しません。 _renderItemForMultiple
のパラメータを定義していなかったからだと思います。どのようにアイテムをそのパラメータに渡すことができますか?何か案が?
私は他のものと少し忙しい、私はあなたを助けたいが、あなたは、このコードの作業のデモを提供できる場合、私はより速く、それをデバッグすることができ、今で議論することはできません。 –
この問題について私に手伝ってくれてありがとう。しかし、私は実行しているplankrを作る:(しかし、ここでは良いニュースではありませんでした、私は線でコード行をデバッグし、私は私がSETSTATEとき '_renderItemForMultiple'がレンダリングされていません発見しました。それはなぜ私がこのアウトを考え出し。EXACTLY? –