4 回答

TA貢獻1772條經(jīng)驗 獲得超8個贊
鑒于
[
{ fullName: 'vocab Experiment', shortName: 'vocab', ......},
{ fullName: 'mind Experiment', shortName: 'mind', ......},
{ fullName: 'whichenglish Experiment', shortName: 'whichenglish', ......},
];
鑒于列表中可以有任意數(shù)量的對象,我將使用if語句,如下所示:
{experiments.map(e => {
if (e.shortName === 'vocab') {
return (<Vocab
id={e.shortName}
title={e.fullName}
duration={e.duration}
post={e.tagline}
img={require('../assets/images/quiz/Vocab.png')}
key={e.shortName}
/>)
} else if (e.shortName === 'mind') {
return <Mind ... />
} else if (e.shortName === 'whichenglish') {
return <WhichEnglish ... />
} else return null; // keep react happy
})}

TA貢獻1788條經(jīng)驗 獲得超4個贊
我認為您可以使用數(shù)組.find()方法來達到此目的,并基于如下方式為每個實驗獲取確切的對象:shortName
const vocabProps = experiments.find(x => x.shortName === 'vocab') || {};
const mindProps = experiments.find(x => x.shortName === 'mind') || {};
const whichenglishProps = experiments.find(x => x.shortName === 'whichenglish') || {};
并且只需在道具上使用跨頁語法,例如:
<Vocab {...vocabProps} />
<Mind {...mindProps} />
<WhichEnglish {...whichenglishProps} />
或者像這樣,如果你想把額外的道具傳遞給組件。img
<Vocab data={vocabProps} img={require('...')}/>
<Mind data={mindProps} />
<WhichEnglish data={whichenglishProps} />

TA貢獻1848條經(jīng)驗 獲得超6個贊
這是你要找的嗎?
const ComponentByType = {
vocab: Vocab,
mind: Mind,
whichEnglish: WhichEnglish
}
//...
{experiments.map(e => {
const type = someHowToGetType(e)
const Component = ComponentByType[type]
return (<Component key={e.shortName} {{...e}}/>)
})}

TA貢獻1887條經(jīng)驗 獲得超5個贊
由于您需要將每個數(shù)組元素呈現(xiàn)到不同的組件,因此不能真正使用 array::map,因為這更適合將數(shù)組映射到同一組件。
給定實驗數(shù)組
const experiments = [
{ fullName: 'vocab Experiment', shortName: 'vocab', ......},
{ fullName: 'mind Experiment', shortName: 'mind', ......},
{ fullName: 'whichenglish Experiment', shortName: 'whichenglish', ......},
];
可以使用數(shù)組解構將每個元素保存到命名變量中
const [vocab, mind, whichEnglish] = experiments;
然后將每個分散到適當?shù)慕M件中
<Vocab
id={vocab.shortName}
title={vocab.fullName}
duration={vocab.duration}
post={vocab.tagline}
img={require('../assets/images/quiz/Vocab.png')}
/>
<Mind
id={mind.shortName}
title={mind.fullName}
duration={mind.duration}
post={mind.tagline}
img={...}
/>
<WhichEnglish
id={whichEnglish.shortName}
title={whichEnglish.fullName}
duration={whichEnglish.duration}
post={whichEnglish.tagline}
img={...}
/>
添加回答
舉報