我的应用程序中有两个屏幕。在按钮上按下,我正在从一个屏幕移动到另一个屏幕。我正在发送参数以显示第二个屏幕。
<Button onPress={ () => navigate('PDF', {pdf: 'Day1.pdf'})} >
PDF屏幕的render()代码类似
render() {
const { navigation } = this.props;
const pdf = navigation.getParam('pdf', './assets/Day1.pdf');
const abpdf = "\'./assets/"+pdf+"\'";
// const rpdf = require('./assets/Day1.pdf');
const rpdf1 = require(abpdf);
return <WebView
source={rpdf1} />
}
我得到undefined is not an object (evaluating 's.value.startsWith')
如果我取消注释硬编码的const rpdf = require('./assets/Day1.pdf')
,并用rpdf替换WebView中的源,则一切正常。当我控制台日志abpdf
时,我得到了正确的值。我在做什么错了?
答案 0 :(得分:0)
我猜它正在膨胀,因为您在字符串中包含了单引号。尝试const abpdf = "./assets/" + pdf;
答案 1 :(得分:0)
您不能具有动态需求,这在文档中已明确告知
答案 2 :(得分:0)
正如@larz在下面使用webpack时指出的那样,require
语句不能具有动态参数。解决方案是导入文件,然后象征性地引用它们。
另一种方法是使用eval
并确保Webpack不分析require
语句。
const ass="../assets/expo.symbol.white.png";
const rass = eval(`require('${ass}');`);
查看small working example。查看文件AssetExamples.js