Как сделать условный рендеринг с помощью переключателя в реагировать родной?

Вот возможное решение # 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
1
задан anu 28 March 2019 в 05:44
поделиться

3 ответа

Мой совет - пойти на карту и сделать изображение следующим образом.

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 в моем коде, потому что требования часто, вместо того, чтобы менять логику в вашем коде, вы должны изменить только в одном месте (что является константой в вашем случае). Код будет действительно чистым и коротким :)

0
ответ дан Ajay Gaur 28 March 2019 в 05:44
поделиться

Попробуйте 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>
   ))
0
ответ дан wicky 28 March 2019 в 05:44
поделиться

Я просто придаю стиль главному виду, и тогда все работает нормально.

  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>
    )
  }

Я установил цвет, так как у меня нет изображения.

0
ответ дан Nirmalsinh 28 March 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: