简体   繁体   English

使用传播属性反应组件的渲染列表

[英]react render list of components using spread attributes

I want to render a list of components using {...props} and I seem to be missing a point here because I've read almost everything about passing props via Link and react-router and spreading attributes and I'm still not there. 我想使用{...props}渲染组件列表,这里似乎遗漏了一点,因为我已经阅读了有关通过Linkreact-router传递prop以及传播属性的几乎所有内容,但我仍然不在那里。

I want to render a list of thumbnails, and I don't know where to place the var options object in order to fix the this.props.partnersData is undefined error that I'm getting now. 我想呈现一个缩略图列表,并且我不知道在哪里放置var options对象才能修复this.props.partnersData is undefined我现在得到的this.props.partnersData is undefined错误。

You can see full code for this here: https://github.com/eyerean/company-website 您可以在这里看到完整的代码: https : //github.com/eyerean/company-website

The working version of partners.jsx is this, and in comments I have the desired version: partners.jsx的工作版本是这样,在注释中,我具有所需的版本:

var React = require('react');
var Thumbnail = require('./thumbnail');

// var options= {
//   partnersData: [{
//     src:"http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg",
//     header:"companyName",
//     link:"//example.com/"
//   },{
//     src:"http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg",
//     header:"companyName",
//     link:"//example.com/"
//   }]
// };

module.exports = React.createClass({
  render: function(){

    // console.log('props in partners: ', this.props);
    // var list = this.props.partnersData.map(function(thumbnailProps){
    //   return <Thumbnail {...thumbnailProps} />
    // });
    //
    // return <div>
    //   {list}
    // </div>

    return <div>
      <h2>Partners</h2>
        <div className="row">
          <div className="col-md-4">
            <Thumbnail
            src="http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg"
            header="companyName"
            link="//example.com/"
            />
          </div>
          <div className="col-md-4">
            <Thumbnail
            src="http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg"
            header="companyName"
            link="//example.com/"
            />
          </div>
          <div className="col-md-4">
            <Thumbnail
            src="http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg"
            header="companyName"
            link="//example.com/"
            />
          </div>
        </div>
        <div className="row">
          <div className="col-md-4">
            <Thumbnail
            src="http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg"
            header="companyName"
            link="//example.com/"
            />
          </div>
          <div className="col-md-4">
            <Thumbnail
            src="http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg"
            header="companyName"
            link="//example.com/"
            />
          </div>
        </div>
      </div>

  }
});

I want to avoid that ugly copy-pasted list of Thumbnails over there.. 我想避免在那张丑陋的复制粘贴缩略图列表。

Partners are rendered with Link in community.jsx : 合作伙伴通过community.jsx Link呈现:

module.exports = React.createClass({
  render: function(){
    return <div className="container-fluid">
         <div className="col-md-3 sidebar fix">
           <ul className="nav nav-sidebar">
             <li className="active"><Link to="community/partners">Partners</Link></li>
             <li><Link to="community/blog">Blog</Link></li>
           </ul>
         </div>

         <div className="container col-md-9">
           <h2>Community</h2>
           <LoremIpsum />
         </div>
      </div>
  }
});

In partners.jsx, do following. 在partners.jsx中,执行以下操作。 There is no props passed to partners components, it will have it's own state which will be your options var. 没有道具传递给合作伙伴组件,它将具有自己的状态,这将是您的选择变量。

module.exports = React.createClass({
  getInitialState: function() {
    return  {
       partnersData: [{
         src:"http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg",
         header:"companyName",
         link:"//example.com/"
       },{
         src:"http://www.clker.com/cliparts/O/v/c/b/i/6/generic-logo.svg",
         header:"companyName",
         link:"//example.com/"
       }]
     };
  },

  render: function(){
    console.log('props in partners: ', this.state);
     var list = this.state.partnersData.map(function(thumbnailProps){
       return <Thumbnail {...thumbnailProps} />
     });

     return <div>
       {list}
    </div>
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM