首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jsx: ReactJS中的if-jsx语句

在jsx: ReactJS中的if-jsx语句
EN

Stack Overflow用户
提问于 2017-05-18 11:05:54
回答 17查看 295.5K关注 0票数 119

当给定特定状态时,我需要更改呈现函数并运行一些子呈现函数,

例如:

代码语言:javascript
复制
render() {
    return (   
        <View style={styles.container}>
            if (this.state == 'news'){
                return (
                    <Text>data</Text>
                )
            }
        </View>
    )
}

如何在不改变场景的情况下实现这一点,我将使用选项卡动态地更改内容。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2017-05-18 11:12:47

根据文档

if- JSX语句在JSX中不起作用。这是因为JSX只是函数调用和对象构造的语法糖。

基本规则:

JSX从根本上说是句法糖。编译后,JSX表达式成为常规的JavaScript函数调用,并对JavaScript对象进行计算。我们可以将任何JavaScript表达嵌入到JSX中,方法是将它封装在大括号中。

但是只有表达式而不是语句,直接意味着我们不能将任何语句(if-else/开关/for)放入JSX中。

如果要有条件地呈现元素,则使用ternary operator,如下所示:

代码语言:javascript
复制
render() {
    return (   
        <View style={styles.container}>
            {this.state.value == 'news'? <Text>data</Text>: null }
        </View>
    )
}

另一个选项是,从jsx调用一个函数,并将所有if-else逻辑放入其中,如下所示:

代码语言:javascript
复制
renderElement(){
   if(this.state.value == 'news')
      return <Text>data</Text>;
   return null;
}

render() {
    return (   
        <View style={styles.container}>
            { this.renderElement() }
        </View>
    )
}
票数 212
EN

Stack Overflow用户

发布于 2020-03-03 07:34:12

您可以使用立即调用的函数表达式(IIFE)来实现您正在说的话。

代码语言:javascript
复制
render() {
    return (   
        <View style={styles.container}>
            {(() => {
              if (this.state == 'news'){
                  return (
                      <Text>data</Text>
                  )
              }
              
              return null;
            })()}
        </View>
    )
}

下面是一个工作示例:

但是,在您的情况下,您可以继续使用三元操作符。

票数 54
EN

Stack Overflow用户

发布于 2017-05-18 13:35:32

我发现这条路是最好的:

代码语言:javascript
复制
{this.state.yourVariable === 'news' && <Text>{data}<Text/>}
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44046037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档