【问题标题】:For loop in react render method [duplicate]反应渲染方法中的for循环[重复]
【发布时间】:2015-07-03 18:14:06
【问题描述】:

我想为我的网格创建分页链接。我将 maxPages(number) 属性传递给组件,但我不能在渲染方法中使用。我能做什么?

var Pagination = React.createClass({

render: function(){


    return(
    <div class="text-center">
        <ul class="pagination">

            <li><a href="#">«</a></li>
            {for (var i=0;i <10;i++;)
            {
              return( <li><a href="#">i + 1 </a></li>);
            }
            }

            <li><a href="#">»</a></li>
        </ul>
    </div>);

}});

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    你可以在渲染之前运行循环(注意你的for循环中有错误)

    var lis = [];
    
    for (var i=0; i<10; i++) {
        lis.push(<li><a href="#">{i + 1}</a></li>);
    }
    
    var Pagination = React.createClass({
        render: function(){
            return(
                <div class="text-center">
                    <ul class="pagination">
    
                        <li><a href="#">«</a></li>
                        {lis}
                        <li><a href="#">»</a></li>
                    </ul>
                </div>
            );
        }
    });
    

    FIDDLE

    【讨论】:

    • 请注意,将组件放在渲染之外然后在渲染中使用它们会破坏 0.13 中的一些东西(0.14 正在改变这一点)。
    【解决方案2】:

    您只能将表达式嵌入 JSX。

    <ul className="pagination">{children}</ul>
    

    被转换成类似的东西

    React.createElement('ul', {className: 'pagination'}, children);
    

    您现在是否明白为什么永远不能用for 循环代替children?语句不能在函数调用表达式中。

    您可以预先创建一个数组,例如adeneo showed in their answer

    【讨论】:

    • 奇怪的是,运行map 有效,因为它返回一个数组-> jsfiddle.net/adeneo/69z2wepo/7038
    • 是的,因为 Array(10).join().split(',').map(...) 是一个表达式 :) React.createElement('ul', {className: 'pagination'}, Array(10).join().split(',').map(...)); 不是语法错误。
    • 啊哈,所以createElement 接受一个子元素、一组子元素或文本内容,并且任何返回其中之一的表达式都是有效的。
    • 这个 JSX 转换的东西很聪明!
    • 是的!这只是适量的魔法:)(我个人的看法)
    猜你喜欢
    • 2021-03-19
    • 2021-12-20
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多