Если я правильно понимаю вашу проблему, вариант решения этой проблемы будет состоять в том, чтобы передать логическую «отображаемую реквизит», чтобы кнопка редактирования отображалась только при необходимости:
EventListScreen.js (остается прежним, здесь кнопка редактирования не отображается)
<FlatList
data={this.state.events}
// Get the item data by referencing as a new function to it
renderItem={({item}) =>
<Event
openEventDetail={() => this.openEventDetail(item)}
{...item}
/>}
/>
UserProfileScreen.js (мы добавляем пропущение shouldShowEditButton к событию, чтобы показать кнопку)
<FlatList
data={this.state.events}
// Get the item data by referencing as a new function to it
renderItem={({item}) =>
<Event
openEventDetail={() => this.openEventDetail(item)}
openEditEvent={() => this.openEditEvent(item)}
shouldShowEditButton
{...item}
/>}
/>
Event.js (Мы добавим несколько propTypes и defaultProps для обработки новой проп, не будет отображаться кнопка редактирования, если она не указана)
export default class Event extends Component {
render() {
return (
<Card>
<CardSection>
<Text>{this.props.eventName}</Text>
//I want this button to be displayed only if user is viewing
//from the UserProfile.js
{this.props.shouldShowEditButton && <Button onPress={() =>this.props.openEditEvent()}>
{this.props.displayButton}
</Button>}
</CardSection>
<TouchableOpacity
onPress={() => this.props.openEventDetail()}
>
...
...
);
...
}
}
// We add some default propTypes and definitions
Event.propTypes = {
shouldShowEditButton: PropTypes.bool
};
Event.defaultProps = {
shouldShowEditButton: false
};
Таким образом, вы показываете кнопку редактирования только для компонентов, для которых задана опора shouldShowEditButton
, а поскольку значение по умолчанию определено как false
, компоненты, не имеющие этого свойства, будут работать в так же, как они были раньше.