我有一个React Native应用程序,可以显示人员资料(例如Facebook)。我使用React Navigation在屏幕之间导航。
在人员页面上,您可以按另一个人员项目,然后导航到具有不同人员ID的同一人员页面。
这是我在按下人员项目时的导航方式:
props.navigation.push('PersonPage', {personId: person.id})
它正在工作并导航到新屏幕,并且还正确获取了数据(人员详细信息),但是在页面使用新数据呈现之前,我得到了以下错误:
JSON value '<null>' of type NSNull cannot be converted to NSNumber
。
单击消除错误时,我可以看到完整的个人资料,一切都很好。
但是当我返回(props.navigation.goBack()
时,它会移回到上一页(人称页面),但最后一个人的ID丢失并且该页面为空。
如何正确处理?为什么会出现此错误?回去时如何保存前一个人的ID?
谢谢!
答案 0 :(得分:1)
由于您尚未提供代码,因此我添加了用于处理带有参数的屏幕导航的步骤。您能尝试一下吗,如果发现任何困难,请告诉我
constructor(props) {
super(props);
this.state = {
personId: 0,
data: [],
};
}
componentDidMount() {
this.setState({ personId: this.props.navigation.state.params.personId })
this._getPageData()
}
static getDerivedStateFromProps(nextProps, prevState) {
// For differnt personid, ie if props changes
if (nextProps.navigation.state.params.personId !== prevState.personId) {
return {
personId: nextProps.navigation.state.params.personId
}
}
return null;
}
componentDidUpdate(prevProps, prevState) {
if (this.props.navigation.state.params.personId !== prevProps.navigation.state.params.personId) {
this._getPageData();// Fetch data again if props changes
}
}
_getPageData(){
// Console.log(this.state.personId) and see if correct value is showing
// fetch data based on this.state.personId
}
按如下所示添加导航键
onPress{() => {
const navigateAction = NavigationActions.navigate({
routeName: 'YourRoute',
params: { personId: YOURPERSONID },
});
this.props.navigation.dispatch(navigateAction);
}}
答案 1 :(得分:0)
您是否尝试过使用navigation.navigate代替navigation.push?因为push的作用是将页面显式地推送到新堆栈中,因此在按navigation.goBack()时不会检索老年人id。因此,当您按下屏幕的backButton时(即返回时),您可以显式调用this.props.navigation.push('Person',{id:id})。
您可以尝试使用navigation.navigate,看看是否有帮助。
如有疑问,请放心。疾病帮助:D
答案 2 :(得分:0)
将此代码添加到您的组件类中
state = {
viewVisibility: true,
};
shouldComponentUpdate() {
if (this.state.viewVisibility) return true;
return false;
}
导航新用户页面时 还要调用setState
this.setState({
visibility:false})