【发布时间】:2018-08-19 08:52:57
【问题描述】:
我有一个 React 组件,它从包含应用程序所需的图像、副本和其他数据的文件中提取。我遇到的问题只是语法问题:如何根据组件的状态引用这些数据?
data.js 看起来像这样(简化版):
import changingAgents from '../public/images/changing-agents.jpg';
import cta from '../public/images/cta.jpg';
import logo from '../public/images/logo.jpg';
export const images = {
changingAgents,
cta,
logo,
}
export const copy = {
services: {
header: 'What are you looking for?',
firstTimeInvestor: {
title: 'First-Time Investor Service',
intro: 'At vero eos et accusamus et iusto odio dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti atque.',
},
changingAgents: {
title: 'Changing Agents',
intro: 'At vero eos et accusamus et iusto odio dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti atque corrupti.',
},
}
这里是组件的相关部分,Services.js:
import { copy, images } from '../../data';
export default class Services extends Component {
state = {
segmentTrigger: 'changingAgents',
}
changeSegmentTrigger(chosenSegmentTrigger) {
this.setState({segmentTrigger: chosenSegmentTrigger})
}
render() {
return (
<div className="services">
<h2>{copy.services.header}</h2>
<Section backgroundImage={this.state.segmentTrigger} className="services__segment-triggers" >
<div className="services__segment-triggers__select">
<Button color="yellow" onClick={() => this.changeSegmentTrigger('firstTimeInvestor')} label="First-Time Investor" />
<Button color="yellow" onClick={() => this.changeSegmentTrigger('changingAgents')} label="Changing Agents" />
</div>
<div className="services__segment-triggers__info">
{/* Insert header here! */}
</div>
</Section>
</div>
)
}
}
基本上我需要做的是在<div className="services__segment-triggers__info"> 中添加将根据this.state.segmentTrigger 更改的文本。我尝试了一些变体无济于事,例如:
-
<h2>{copy.services.${this.state.segmentTrigger}.title}</h2> -
<h2>{copy.services.${this.state.segmentTrigger}.title}` <h2>{copy.services.this.state.segmentTrigger.title}</h2>
这可能吗?我得到前两个的语法错误,第三个不起作用(这对我来说显然是合乎逻辑的,即使尝试它也有点像 Hail Mary,因为当然没有名为 this 的键copy.services 对象)。
【问题讨论】:
-
试试(注意:方括号):
<h2>{copy.services[${this.state.segmentTrigger}]}</h2>
标签: javascript reactjs ecmascript-6 ecmascript-2016 template-literals