Reactjs中{... this.props}的含义是什么?

时间:2015-02-11 10:47:33

标签: reactjs

的含义是什么?
{...this.props}

我试图像那样使用它

 <div {...this.props}> Content Here </div>

5 个答案:

答案 0 :(得分:155)

它被称为spread attributes,其目的是使道具的传递更容易。

让我们假设您有一个接受N个属性的组件。如果数量增加,将这些传递下去可能会很乏味且难以处理。

<Component x={} y={} z={} />

因此,你这样做,将它们包装在一个对象中并使用扩散符号

var props = { x: 1, y: 1, z:1 };
<Component {...props} />

会将其解压缩到您组件的道具中,即,只有当您将道具传递给另一个组件时,才“永远”在{... props}函数中使用render()。正常this.props.x使用解压缩的道具。

答案 1 :(得分:12)

它是ES6 Spread_operatorDestructuring_assignment

<div {...this.props}>
  Content Here
</div>

它等于类组件:

const person = {
    name: "xgqfrms",
    age: 23,
    country: "China"
};

class TestDemo extends React.Component {
    render() {
        const {name, age, country} = {...this.props};
        // const {name, age, country} = this.props;
        return (
          <div>
              <h3> Person Information: </h3>
              <ul>
                <li>name={name}</li>
                <li>age={age}</li>
                <li>country={country}</li>
              </ul>
          </div>
        );
    }
}

ReactDOM.render(
    <TestDemo {...person}/>
    , mountNode
);

enter image description here

功能组件

const props = {
    name: "xgqfrms",
    age: 23,
    country: "China"
};

const Test = (props) => {
  return(
    <div
        name={props.name}
        age={props.age}
        country={props.country}>
        Content Here
        <ul>
          <li>name={props.name}</li>
          <li>age={props.age}</li>
          <li>country={props.country}</li>
        </ul>
    </div>
  );
};

ReactDOM.render(
    <div>
        <Test {...props}/>
        <hr/>
        <Test 
            name={props.name}
            age={props.age}
            country={props.country}
        />
    </div>
    , mountNode
);

enter image description here

有关详细信息,请参阅以下链接:

答案 2 :(得分:1)

这是ES-6功能。这意味着你提取道具的所有属性 div.{... }

运算符用于提取对象的属性。

答案 3 :(得分:0)

它将编译为:

React.createElement('div', this.props, 'Content Here');

如上所示,它将所有道具传递给div

答案 4 :(得分:0)

您将在子组件中使用道具

例如

如果您现在的道具是

{
   booking: 4,
   isDisable: false
}

您可以在孩子的电脑中使用此道具

 <div {...this.props}> ... </div>

在您的子组件中,您将收到所有父项道具。