回答:
これはスプレッド属性と呼ばれ、その目的は小道具の通過を容易にすることです。
N個のプロパティを受け入れるコンポーネントがあるとします。数が増えると、これらを渡すのは面倒で扱いにくい場合があります。
<Component x={} y={} z={} />
したがって、代わりにこれを行い、それらをオブジェクトにラップして、スプレッド表記を使用します
var props = { x: 1, y: 1, z:1 };
<Component {...props} />
これは、コンポーネントの小道具にそれをアンパックします。つまり、小道具を別のコンポーネントに渡す場合にのみ{... props}
、render()
関数内で「決して」使用しません。開梱した小道具を通常どおり使用しますthis.props.x
。
ES6 Spread_operator
とDestructuring_assignment
です。
<div {...this.props}>
Content Here
</div>
に等しい Class Component
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
);
または Function component
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
);
this.transferPropsTo
で、React 0.12.xで非推奨になり、0.13.xで削除される代替品として考えると役立ちます。もちろん、はるかに高度な使用法が可能ですが、React 0.11.xを単にに翻訳this.transferPropsTo(<Foo />)
すること<Foo {...this.props} />
は、その移行を行う人々にとって最も有用です。