代码之家  ›  专栏  ›  技术社区  ›  The Old County

antd时间线的Reactjs条件属性

  •  2
  • The Old County  · 技术社区  · 7 年前

    我正在为我创建的这个ReactJS组件循环一组JSON数据,该组件有一个时间轴。

    "chart": [{
        "label": "Registered",
        "date": "2017-07-03" 
    }, {
        "label": "1",
        "date": "2017-07-04"
    }, {
        "label": "2",
        "date": "2017-08-01"
    }, {
        "label": "3",
        "date": "2017-09-01"
    }]
    

    代码如下所示:

    <Timeline>
        {
            this.props.data.contents.chart.map(function(e, index) {
                return (
                    <Timeline.Item key={index}>
                        {e.label}
                        <span>{moment(e.date).format("DD MMM YYYY")}</span>
                    </Timeline.Item>
                );
            })
        }            
    </Timeline>
    

    Timeline.Item 部分但我有语法错误。

    <Timeline>
        {
            this.props.data.contents.chart.map(function(e, index) {
                return (
                    <Timeline.Item key={index} (e.label === "Registered" ? "dot={<Icon type="idcard" style={{ fontSize: '12px' }} />} color="red"" : null)>
                        {e.label}
                        <span>{moment(e.date).format("DD MMM YYYY")}</span>
                    </Timeline.Item>
                );
            })
        }            
    </Timeline>
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Ghassen Louhaichi    7 年前

    您无法基于三元运算符构建实际的JSX语法代码。您需要执行以下操作之一:

    <Timeline>
        {
            this.props.data.contents.chart.map(function(e, index) {
                return (
                    <Timeline.Item key={ index }
                                   dot={ (e.label === 'Registered' ? <Icon type="idcard" style={{ fontSize: '12px' }} /> : null) }
                                   color={ (e.label === 'Registered' ? 'red' : '') }>
                        {e.label}
                        <span>{moment(e.date).format("DD MMM YYYY")}</span>
                    </Timeline.Item>
                );
            })
        }            
    </Timeline>
    

    或者根据条件返回完全不同的JSX:

    <Timeline>
    {
        this.props.data.contents.chart.map(function(e, index) {
            if (e.label === 'Registered') {
                return (
                    <Timeline.Item key={ index }
                                   dot={ <Icon type="idcard" style={{ fontSize: '12px' }} /> }
                                   color="red">
                        {e.label}
                        <span>{moment(e.date).format("DD MMM YYYY")}</span>
                    </Timeline.Item>
                );
            }
            return (
                <Timeline.Item key={ index }>
                    {e.label}
                    <span>{moment(e.date).format("DD MMM YYYY")}</span>
                </Timeline.Item>
            );
        })
    }            
    </Timeline>