#react-native #navigation
#react-native #навигация
Вопрос:
Я совсем новичок в React native. Я хочу задать информацию, включающую добавление, редактирование и отображение подробностей на одном экране, поэтому я устанавливаю состояние для каждого события при его вызове.
При добавлении я устанавливаю isAdding, при редактировании я устанавливаю isEditing, а при отображении деталей я устанавливаю isShowDetail и перемещаюсь по ним, вот так.
Экран A:
this.props.navigation.navigate(ROUTE_INVOICE_DETAIL_NAME, { invoice, isEditing: true });
и экран B (Подробности):
constructor(props) {
super(props);
this.isShowDetail = props.navigation.getParam("isShowDetail");
console.log(this.isShowDetail);
this.isAdding = props.navigation.getParam("isAdding")
this.isEditing = props.navigation.getParam("isEditing");
const { params = {} } = this.props.navigation.state;
const { invoice = {} } = params;
const { paid = 0, incurred = 0, transportFee = 0, id} = invoice;
this.state = {
id,
invoice,
isShowTicketDetail: false,
customer: {},
paid,
incurred,
transportFee,
details: {},
};
Я не знаю, как получить isEditing
и isAdding
значение, оно возвращает undefined.
ROUTE_INVOICE_DETAIL_NAME
объявлено, и я уверен, что это подробно описано.
Комментарии:
1. Похоже, вы используете react-navigation? Я бы ожидал, что props.navigation.getParam («isEditing») даст вам то, что вы хотите. Метод getParam является вспомогательным, и вы также можете просмотреть все параметры навигации из props.navigation.state.params — вы могли бы попробовать console.log(props.navigation.state.params) и посмотреть, есть ли там то, что вы ожидаете.
2. Кроме того, это для вас деталь стиля: но похоже, что вы иногда устанавливаете
isEditing
, иногда устанавливаетеisAdding
, а иногда устанавливаетеisShowDetail
. Никогда не имело бы смысла устанавливать ни один из них, и никогда не имело бы смысла устанавливать два или три из них. Я бы, вероятно, вызвал строковый параметрmode
или что-то в этом роде и установил бы для него значениеSHOW_DETAIL
,CREATE
иEDIT
. Тогда вам не нужно проверять 3 разных логических значения, вы можете просто проверить наличие 3 разных вариантов одного поля.
Ответ №1:
На экране A:
this.props.navigation.navigate(ROUTE_INVOICE_DETAIL_NAME, {
invoice_data: invoice ,
isEditing: true
})
На экране B вы можете получить данные, подобные этому :
let invoice_data = this.props.navigation.state.params.invoice_data
let isEditing = this.props.navigation.state.params.isEditing