73

我有一个名为的组件tileGroup,它的属性是其他属性的集合(数组)。

父组件(tileGroup)通过使用集合中的每组属性创建一个新组件来呈现一个子组件列表。

现在我正在将每个属性从集合中单独映射到子组件,但是如果组件的属性计数增加,这将变得很麻烦,而且我确信有一种更清洁、更简单的方法来做到这一点......

如何在不重新映射每个属性的情况下将完整的属性集传递给子组件?

示例代码:

tileGroupData = {someProperty: 'something', someOtherProperty:'something', 
                tiles: [{vsize:1, hsize:2, etc...}, {vsize:2,hsize:3,title:'whatever'}]};

然后创建组件..

var tileGroup = React.createClass({
    render: function() {
       var thechildren = this.props.tiles.map(function(tile)
       {
           //this is what I DON'T want to be doing. 
           return <tileSimple vsize = {tile.vsize} hsize = {tile.hsize} content = {tile.content}/>;

           //what I DO want to be doing
           return <tileSimple allTheProps = {tile}/>; 
       });
4

4 回答 4

130

显然 transferPropsTo 已被弃用。使用最新版本的 React,您可以使用 JSX 传播属性:

return <tileSimple {...tile} />;

更多关于这里的信息:弃用 transferPropsTo

于 2014-11-11T07:50:16.263 回答
32

对于这些用例,最简单的方法是回退到 JS API 而不是 JSX。

return tileSimple(tile);

要了解它的工作原理,请使用 JSX 编译器工具 ( http://facebook.github.io/react/jsx-compiler.html )查看您想要的版本的生成版本

<tileSimple vsize = {tile.vsize} hsize = {tile.hsize} content = {tile.content}/>;
tileSimple( {vsize:  tile.vsize, hsize:  tile.hsize, content:  tile.content});
于 2014-01-03T22:12:11.033 回答
6

您实际上可以在渲染中执行以下操作

return this.transferPropsTo(<tileSimple />);
于 2014-05-27T01:49:04.360 回答
0

你建议做什么,

return <tileSimple allTheProps={tile} />;

工作得很好。

tileSimple组件中,您应该能够使用如下语法访问属性,

var vsize = this.props.allTheProps.vsize;
var hsize = this.props.allTheProps.hsize;
于 2014-01-03T22:15:43.803 回答