여러 개의 선택 모달을 작성 중입니다. 사용자가 항목을 누르면 항목이 '선택됨'으로 표시되어야합니다.setState()를 실행하면 FlatList 항목이 업데이트되지 않습니다.
문제 id 배열에서 id를 추가/제거했습니다. 내가 모달을 열었을 때 '확인'표시가 보이지 않습니다. 그러나 모달을 닫고 다시 열면 '확인'기호가 표시됩니다.
나는 모달 구성 요소의 상태에있는 항목을 정의, 선택한 항목을 추적합니다. 여기state = {
selectedSeasonIds: this.props.selectedSeasonIds,
}
반응 네이티브 모달 나는이 각 항목
_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>
화면에 모달를 표시하는 데 사용하는 것입니다, FlatList의 상품 통화 _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>);
}
기타 조언도 환영합니다. 이 게시물을 읽어 주셔서 감사합니다.
업데이트 코드로 디버깅했으며 항목을 누르면 _renderItemForMultiple
을 통과하지 않습니다. _renderItemForMultiple
에 대한 매개 변수를 정의하지 않았기 때문입니다. 항목을 매개 변수로 전달하려면 어떻게해야합니까? 어떤 생각?
저는 다른 것들로 약간 바쁩니다. 여러분을 도우고 싶지만 지금은 논할 수 없습니다.이 코드의 작업 데모를 제공 할 수 있다면 더 빨리 디버깅 할 수 있습니다. –
이 문제에 대한 도움을 주셔서 감사합니다. 그러나 실행중인 plankr 만들 수 없습니다. (그러나 여기에 좋은 소식입니다, 내가 줄 단위로 코드를 디버깅하고 setState 때'_renderItemForMultiple' 렌더링되지 않습니다. 왜 렌더링하지 않습니다? –