Троичная операция в TouchableOpacity

#react-native

#react-native

Вопрос:

Я пытаюсь использовать это так, но это выдает ошибку «Не вкладывать троичные выражения». Как мне это исправить?

 <TouchableOpacity>
   {
     this.state.RefreshImage ? <Image source={require('../Images/add2.png')} style={{ height: 40, width: 40 }} /> :
    !this.state.RefreshImage amp;amp; this.state.ButtonNumber === '1' ? <Image source={{ uri: imageUri }} style={{ height: 40, width: 40 }} />               
  }                      
</TouchableOpacity> 
  

Комментарии:

1. Вторая троичная операция не имеет никакого смысла. Оба варианта абсолютно одинаковы.

2. О, извините. Отредактированный пост @JJJ. когда я использую подобное, это выдает ошибку. даже если я добавляю ‘:’ конец кода, это все равно выдает ошибку

3. Теперь это имеет еще меньше смысла. Что оно должно показывать, когда второе условие равно false?

4. @hakan Должно быть что-то, что нужно возвращать для каждого троичного условия. Во второй троичной системе нечего возвращать в последней части. Проверьте мой ответ на то же самое.

5. Я пытался ответить на ваш вопрос раньше, но он выдает мне ту же ошибку @Nirmalsinh

Ответ №1:

Ошибка (предположительно от ESLint или какого-либо другого инструмента компоновки) означает, что вложенные троичные операторы превращают код в нечитаемый беспорядок. Лучше всего отделить логику от JSX и использовать «обычные» условные операторы, чтобы смысл был понятнее и его было легче прочитать. Например:

 let image = null;

if(this.state.RefreshImage) {
  image = <Image source={require('../Images/add2.png')} style={{ height: 40, width: 40 }} />;
}
else if(this.state.ButtonNumber === '1') {
  image = <Image source={{ uri: imageUri }} style={{ height: 40, width: 40 }} />;
}

// ...

<TouchableOpacity>
    {image}
</TouchableOpacity>
  

(Обратите внимание, что во втором условии это !this.state.RefreshImage amp;amp; .. не требуется, поскольку выполнение предыдущего условия уже гарантировано как истинное.)

Ответ №2:

Вам нужно вернуть что-то в ложное условие второго троичного условия:

  return(
      <TouchableOpacity>
      {
        RefreshImage ? <Image source={require('../Images/add2.png')} style={{ height: 40, width: 40 }} /> :
       !RefreshImage amp;amp; ButtonNumber === '1' ? <Image source={{ uri: imageUri }} style={{ height: 40, width: 40 }} /> : null
     }                      
   </TouchableOpacity> 
  

Мой протестированный код на локальном:

 renderUpdate(){
    let RefreshImage = false
    let ButtonNumber = '0'


    return(
      <TouchableOpacity>
      {
        RefreshImage ? <Image source={IC_LOGO} style={{ height: 40, width: 40, backgroundColor:'blue' }} /> :
       !RefreshImage amp;amp; ButtonNumber === '1' ? <Image source={IC_CHECKBOX} style={{ height: 40, width: 40, backgroundColor:'green' }} /> : <View style={{width:40, height: 50 , backgroundColor:'red'}}/>
     }                      
   </TouchableOpacity> 
    )
  }

  render() {

    return(
      <View style={{
        flex: 1,
        backgroundColor: APP_COLOR,
      }}>
             {this.renderUpdate()}

        </View>
    );
}
  

Без правила eslint:

   renderUpdate(){
    let RefreshImage = false
    let ButtonNumber = '0'
    let imageLocal = null
    if(RefreshImage){
      imageLocal = <Image source={IC_LOGO} style={{ height: 40, width: 40, backgroundColor:'blue' }} />
    }else if(!RefreshImage amp;amp; ButtonNumber === '1'){
      imageLocal = <Image source={IC_CHECKBOX} style={{ height: 40, width: 40, backgroundColor:'green' }} />
    }else{
      imageLocal = <Image source={IC_BACKGROUND_IMAGE} style={{ height: 40, width: 40, backgroundColor:'green' }} />
    }

    return(
      <TouchableOpacity>
     {imageLocal}
    </TouchableOpacity> 

    )

  }
  

Комментарии:

1. Это все еще выдает мне ошибку. в первой строке мне сказано: не вставлять троичные выражения.eslint(no-nested-ternary)

2. Это связано с правилом eslint. Оформить заказ eslint.org/docs/2.0.0/rules/no-nested-ternary для того же. Если вам нужно отключить правило или использовать другой способ, отличный от троичного.

3. Вы можете просто использовать лидер if else, чтобы получить ответ.