Вот возможное решение # 1 в контексте исходного вопроса, основанного на превосходном ответе Рекса
val name = "World" //> name: String = World
val template = name=>s"Hello $name" //> template: Seq[Any]=>String = <function1>
val message = template(name) //> message: String = Hello World
Мой совет - пойти на карту и сделать изображение следующим образом.
const WORKTYPE_TO_IMAGE = {
Plumber: BASE.URL + 'Images/Plumber.png',
Electrician: BASE.URL + 'Images/electrician.png',
AC: BASE.URL + 'Images/ac.png',
};
renderImage(){
return (
<Image style={{ height: 100, width: 100 }} source={WORKTYPE_TO_IMAGE[this.state.workType]} />
)
}
Вы использовали тег изображения трижды, но теперь вы будете использовать его только один раз (поэтому соблюдается принцип «Не повторять»). Кроме того, я действительно ненавижу if / switch в моем коде, потому что требования часто, вместо того, чтобы менять логику в вашем коде, вы должны изменить только в одном месте (что является константой в вашем случае). Код будет действительно чистым и коротким :)
Попробуйте console.log
свои this.state.workType
, потому что это может быть не то значение, которое вы думаете, это должно быть. Поскольку у вас нет случая default
, функция ничего не возвращает.
Кроме того, было бы проще, если бы вы взяли workType
в качестве параметра для своей функции renderImage
. Я подозреваю, что ваш this.state.workType
не будет таким же, как ваш a.work_type
в функции workers.map
. Вы можете сделать это так
const renderImage = (workType) => {
switch (workType) {
...
}
}
//and then
workers.map((a, index) => (
<TouchableOpacity onPress={() => this.popUpDialog(a.id, a.work_type)}>
<Card>
{this.renderImage(a.work_type)}
<Text>{a.work_type}</Text>
</Card>
</TouchableOpacity>
))
Я просто придаю стиль главному виду, и тогда все работает нормально.
renderImage(workType) {
switch (workType) {
case 0:
return (
<Image style={{ height: 100, width: 100, backgroundColor: 'green' }} />
);
case 1:
return (
<Image style={{ height: 100, width: 100, backgroundColor: 'yellow' }} />
);
case 2:
return (
<Image style={{ height: 100, width: 100, backgroundColor: 'blue' }} />
);
}
}
//source={{ uri: require('./1.jpg') }}
render() {
let workers = [{ work_type: 'Plumber' }, { work_type: 'Electrician' }, { work_type: 'AC' }];
return (
<View style={{ width: '100%', height: '100%', backgroundColor: 'red' }}>
{
workers.map((a, index) => (
<TouchableOpacity onPress={() => this.popUpDialog(a.id, a.work_type)}>
<View>
{this.renderImage(index)}
<Text>{a.work_type}</Text>
</View>
</TouchableOpacity>
))
}
</View>
)
}
Я установил цвет, так как у меня нет изображения.