我需要帮助:)。 我的项目是2个页面,分别是react native,MainPage和SoundRecord。 我的初始化屏幕是MainPage,当我按下“获取声音”按钮时 我移动到另一个组件来录制声音(我在响应本机导航时移动)。 当我回来时,我想返回filePath(保存文件的位置..)。 我想将其插入状态。
当我在MainPage中这样做时:
this.state{
filePath: this.props.navigation.state.params.filePath
}
给出错误: 未定义不是对象(评估'this.props.navigation.state.params.filePath') 并且我理解这一点,因为我从MainPage开始我的项目,而从SoundRecord页面上没有filePath。
我该怎么办? 我可以检查this.props.navigation.state.params.filePath!==未定义吗? 怎么做?我几乎尝试了所有东西...
我输入了相关代码:
主页:
import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View, TouchableOpacity } from 'react-native';
import ImagePicker from 'react-native-image-picker';
import { RNS3 } from 'react-native-aws3';
import { aws } from './keys';
import SoundRecord from './SoundRecord'
export default class MainPage extends Component {
constructor(props){
super(props);
this.state={
file:'' ,
config:'',
filePath: '',
fileName: '',
tag:''
};
}
MoveToSoundRecordPage = () => {
this.props.navigation.navigate('SoundRecord');
}
render() {
return (
<View style={styles.container}>
<TouchableOpacity onPress={this.MoveToSoundRecordPage}>
<Text>take sound</Text>
</TouchableOpacity>
{/* <SoundRecord takeSound={this.takeSound}/> */}
<Text>{this.state.fileName}</Text>
<TouchableOpacity onPress={this.UploadToAWS.bind(this)}>
<Text>Upload To Aws</Text>
</TouchableOpacity>
</View>
);
}
}
SoundRecord完成录音后,我将像这样发送filePath:
finishRecord = (filePath) => {
this.props.navigation.navigate('MainPage',{filePath});
}
谢谢!
答案 0 :(得分:0)
请尝试这个。可能会对您有帮助
在 MainPage屏幕中添加此内容
:componentWillMount() {
const filePath = this.props.navigation.getParam('filePath', '');
this.setState({ filePath:filePath })
}
答案 1 :(得分:0)
如果您要更新前一页上的内容,则可以通过以下方式进行。
MainPage
中创建一个函数,用新的文件路径更新状态。SoundRecord
中传递的函数来更新MainPage
中的状态在您的MainPage
中添加以下内容
sendFilepath = (filePath) => {
this.setState({filePath})
}
更新MoveToSoundRecordPage
函数以将sendFilepath用作参数:
MoveToSoundRecordPage = () => {
this.props.navigation.navigate('SoundRecord', { sendFilepath: this.sendFilepath });
}
然后在SoundRecord
页中,您要更新finishRecord
,以便它调用您已传递的函数。
finishRecord = (filePath) => {
this.props.navigation.state.params.sendFilepath(filePath)
this.props.navigation.goBack();
}
这是小吃https://snack.expo.io/@andypandy/navigation-passing-function,显示了将名为sendFilepath
的功能从Screen1
传递到Screen2
的情况。然后,它在Screen2
中调用传递的函数,并更新Screen1
中的状态。