#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, чтобы получить ответ.