导航 getParam 状态在第一次导航时未定义
Navigation getParam state got undefined on the first navigation
我想将我的一些状态导航到其他屏幕,但在第一次尝试导航时,data_post
的状态未定义,但在第二次尝试时未定义。我的代码中有 wrong/typo 吗?谢谢
async _goToPayment() {
var randomNumber1 = Math.floor(Math.random() * 990);
var randomNumber2 = Math.floor(100000 + Math.random() * 900000)
var orderID = Moment().format('yyyyDDMM')+randomNumber2
let data_buyer = {
first_name: this.state.firstName,
last_name: this.state.lastName,
email: this.state.emailUser
}
let dataPost = {
total_price: this.state.totalPrice,
ticket_id: this.state.idTicket,
total_buyer: 1,
event_id: this.state.idEvent,
ticket_name: this.state.ticketName,
kode_unik: randomNumber1,
order_id: orderID
}
this.setState({
marked1: data_buyer,
marked2: dataPost
});
this.props.navigation.navigate("ChoosePayment", {
data_buyer: this.state.marked1,
data_post: this.state.marked2,
eventData: this.state.eventData
});
}
在另一个屏幕上,我这样写getParam
const { navigation } = this.props
await this.setState({
data_buyer: navigation.getParam("data_buyer", ""),
data_post: navigation.getParam("data_post", ""),
eventData: navigation.getParam("eventData", "")
}, () => console.log(this.state.data_post))
这是因为 setState 是异步的。阅读 this 答案你会有所了解。
只需像这样更新您的代码
async _goToPayment() {
var randomNumber1 = Math.floor(Math.random() * 990);
var randomNumber2 = Math.floor(100000 + Math.random() * 900000)
var orderID = Moment().format('yyyyDDMM')+randomNumber2
let databuyer = { // renamed from data_buyer to databuyer
first_name: this.state.firstName,
last_name: this.state.lastName,
email: this.state.emailUser
}
let dataPost = {
total_price: this.state.totalPrice,
ticket_id: this.state.idTicket,
total_buyer: 1,
event_id: this.state.idEvent,
ticket_name: this.state.ticketName,
kode_unik: randomNumber1,
order_id: orderID
}
this.setState({
marked1: databuyer, //changed here
marked2: dataPost
});
this.props.navigation.navigate("ChoosePayment", {
data_buyer: databuyer, //directly pass databuyer here
data_post: dataPost, //directly pass dataPost here
eventData: this.state.eventData
});
}
我想将我的一些状态导航到其他屏幕,但在第一次尝试导航时,data_post
的状态未定义,但在第二次尝试时未定义。我的代码中有 wrong/typo 吗?谢谢
async _goToPayment() {
var randomNumber1 = Math.floor(Math.random() * 990);
var randomNumber2 = Math.floor(100000 + Math.random() * 900000)
var orderID = Moment().format('yyyyDDMM')+randomNumber2
let data_buyer = {
first_name: this.state.firstName,
last_name: this.state.lastName,
email: this.state.emailUser
}
let dataPost = {
total_price: this.state.totalPrice,
ticket_id: this.state.idTicket,
total_buyer: 1,
event_id: this.state.idEvent,
ticket_name: this.state.ticketName,
kode_unik: randomNumber1,
order_id: orderID
}
this.setState({
marked1: data_buyer,
marked2: dataPost
});
this.props.navigation.navigate("ChoosePayment", {
data_buyer: this.state.marked1,
data_post: this.state.marked2,
eventData: this.state.eventData
});
}
在另一个屏幕上,我这样写getParam
const { navigation } = this.props
await this.setState({
data_buyer: navigation.getParam("data_buyer", ""),
data_post: navigation.getParam("data_post", ""),
eventData: navigation.getParam("eventData", "")
}, () => console.log(this.state.data_post))
这是因为 setState 是异步的。阅读 this 答案你会有所了解。
只需像这样更新您的代码
async _goToPayment() {
var randomNumber1 = Math.floor(Math.random() * 990);
var randomNumber2 = Math.floor(100000 + Math.random() * 900000)
var orderID = Moment().format('yyyyDDMM')+randomNumber2
let databuyer = { // renamed from data_buyer to databuyer
first_name: this.state.firstName,
last_name: this.state.lastName,
email: this.state.emailUser
}
let dataPost = {
total_price: this.state.totalPrice,
ticket_id: this.state.idTicket,
total_buyer: 1,
event_id: this.state.idEvent,
ticket_name: this.state.ticketName,
kode_unik: randomNumber1,
order_id: orderID
}
this.setState({
marked1: databuyer, //changed here
marked2: dataPost
});
this.props.navigation.navigate("ChoosePayment", {
data_buyer: databuyer, //directly pass databuyer here
data_post: dataPost, //directly pass dataPost here
eventData: this.state.eventData
});
}