如果在地图内返回如何使用?

Ban*_*hee 19 javascript reactjs react-jsx

我需要根据数据模型生成不同的reactJS代码但是我得到了

在文件"〜/ Scripts/Grid.jsx"中:解析错误:第13行:意外的令牌if(在第13行第15行)行:52列:3

有了这段代码

var GridRow = React.createClass({
    render: function() {
        var row;

        row = this.props.cells.map(function(cell, i) {
            return (
                if(cell.URL != null && cell.URL.length > 0){
                    <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>        
                }
                else {
                    <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>
                }
            );
        }.bind(this));

        return (
            <tr>
                {row}
            </tr>
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

渲染部分似乎在如何使用它真的有限?

nil*_*gun 25

你把return语句放在if子句中就像这样:

    row = this.props.cells.map(function(cell, i) {

        if(cell.URL != null && cell.URL.length > 0){
            return <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>;        
        }
        else {
            return <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>;
        }

    }.bind(this));
Run Code Online (Sandbox Code Playgroud)

  • @ Chrisk8er嗯,它在js和jsx中都不是一个有效的语法. (3认同)
  • 你能解释为什么 if 语句不能写在 return 中吗? (2认同)

S.K*_*ers 6

您也可以使用三元(内联if / else)语句。它可能看起来像这样:

row = this.props.cells.map(function(cell, i) {
    return (cell.URL != null && cell.URL.length > 0) ? 
        (<td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>) :
        (<td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>)
}.bind(this));
Run Code Online (Sandbox Code Playgroud)

或es6

row = this.props.cells.map((cell, i) => (cell.URL != null && cell.URL.length > 0) ? 
        (<td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>) :
        (<td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>)
);
Run Code Online (Sandbox Code Playgroud)

但是,出于可读性考虑,我建议使用nilgun的答案。

尽管我将删除else语句,但由于它是多余的。您也可以删除大括号,这是优先选择的问题。

row = this.props.cells.map(function(cell, i) {
    if(cell.URL != null && cell.URL.length > 0)
        return <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>;        
    return <td className={cell.Meta.HTMLClass} key={i}>{cell.Text}</td>;
}.bind(this));
Run Code Online (Sandbox Code Playgroud)