在 driveFiles 中我得到了多个文件名。
对于每个附件,我需要附上 pdf 或 word 或 jpg 图标
所以我使用 substr 和 lastIndexOf 得到了文件格式。
现在使用 if 条件我可以禁用一个文件的图标。
如果我测试多个文件,它不会检查第二个 if。
我认为问题是由于第一个 if 中的 return 语句引起的。
你能告诉我如何修复多个文件吗?
{this.props.driveFiles.length > 0 ?
this.props.driveFiles.map(_driveFileKey => {
var driveFormat = _driveFileKey.name.substr(
_driveFileKey.name.lastIndexOf(".") + 1
);
console.log("filename--->", driveFormat);
if (driveFormat === "pdf") {
return (
<div>
{" "}
<Icon icon={["fal", "file-pdf"]} />
{_driveFileKey.name}
</div>
);
} else if (driveFormat === "doc") {
return (
<div>
{" "}
<Icon icon={["fal", "file-word"]} />
{_driveFileKey.name}
</div>
);
} else if (driveFormat === "jpg") {
return (
<div>
{" "}
<Icon icon={["fal", "file-image"]} />
{_driveFileKey.name}
</div>
);
}
//return <div>{_driveFileKey.name}</div>;
})
: ""}
最佳答案
JSX 中的大括号 ({}) 的功能有限,因为它们仅支持 single expression .将表达式视为将由解释器/编译器评估为单行代码的代码块。将如此复杂的逻辑放入单个表达式既难以实现又难以阅读。
将 JSX 表达式与其他有用的 React/Javascript 功能结合使用。下面的解决方案是用 ES6 编写的(如果您需要将其转译为 ES5,请告诉我)。
从适当的文件中导入 Icon 或在此文件中定义它。您可以在 render 函数中填写其余组件。
逻辑被拆分成函数,这样更容易理解代码试图实现的目标。测试一下,看看它是否适合你。
下面还有解释一些片段的注释。
import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import Icon from '...<icon directory>...';
class IconExample extends Component {
constructor(props) {
super(props);
this.getIconInfo = this.getIconInfo.bind(this);
this.getIcons = this.getIcons.bind(this);
}
getIcons(driveFiles) {
return driveFiles.map((driveFileKey, i) => {
const dotIndex = driveFileKey.name.lastIndexOf('.') + 1;
const driveFormat = driveFileKey.name.substr(dotIndex);
console.log('filename---> %s', driveFormat);
const iconInfo = this.getIconInfo(driveFormat);
if (iconInfo === null) {
return null;
}
return (
<div key={`${driveFormat}${i}`}>
<Icon icon={iconInfo} />
</div>
);
});
}
getIconInfo(fileExtension) {
const iconInfo = ['fal'];
if (fileExtension === 'pdf') {
iconInfo.push('file-pdf');
return iconInfo;
} else if (fileExtension === 'doc') {
iconInfo.push('file-doc');
return iconInfo;
} else if (fileExtension === 'jpg') {
iconInfo.push('file-jpg');
return iconInfo;
}
return null;
}
render() {
return (
<Fragment>
{this.props.driveFiles.length > 0 &&
this.getIcons(this.props.driveFiles)
}
</Fragment>
);
}
}
IconExample.propTypes = {
driveFiles: PropTypes.array,
};
export default IconExample;
{this.state.driveFiles.length > 0 &&
this.getIcons(this.state.driveFiles)
}
&&(和)运算符计算两边的语句并返回最后 语句,即右侧的语句。因此,只有当 this.state.driveFiles.length > 0 返回 true 时,才会评估 this.getIcons(this.props.driveFiles)。
<div key={${driveFormat}${i}}>
<Icon icon={iconInfo} />
</div>
This part的 React 文档解释了为什么我们在从迭代器返回时使用键。
this.getIconInfo = this.getIconInfo.bind(this);
this.getIcons = this.getIcons.bind(this);
这是使用“经典”javascript 函数的问题,但我相信在最现代的 ECMAScript 和更高版本中你可以使用 arrow functions在类定义中以避免需要。我们绑定(bind)以确保 this 在函数中引用什么,我们希望它是我们正在使用的组件,而不是全局 this 或任何默认的这种情况。
关于javascript - 每个附件我都需要附上pdf或word或jpg图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56997931/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为