Reactjsの{…this.props}の意味は何ですか


119

の意味は何ですか

{...this.props}

私はそのようにそれを使用しようとしています

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

回答:


201

これはスプレッド属性と呼ばれ、その目的は小道具の通過を容易にすることです。

N個のプロパティを受け入れるコンポーネントがあるとします。数が増えると、これらを渡すのは面倒で扱いにくい場合があります。

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

したがって、代わりにこれを行い、それらをオブジェクトにラップして、スプレッド表記を使用します

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

これは、コンポーネントの小道具にそれをアンパックします。つまり、小道具を別のコンポーネントに渡す場合にのみ{... props}render()関数内で「決して」使用しません。開梱した小道具を通常どおり使用しますthis.props.x


2
追加するだけthis.transferPropsToで、React 0.12.xで非推奨になり、0.13.xで削除される代替品として考えると役立ちます。もちろん、はるかに高度な使用法が可能ですが、React 0.11.xを単にに翻訳this.transferPropsTo(<Foo />)すること<Foo {...this.props} />は、その移行を行う人々にとって最も有用です。
マイクドライバー

13
適切な日除けですが、「あなたはrender()関数内で{... props}を「決して」使用しません。それは、propsを別のコンポーネントに渡す場合に限られます。」非常に紛らわしい語句です。書き直すことをお勧めします。「propsを別のコンポーネントに渡すときは、render()内でのみ{... props}を使用します。」明確にするために。
dprogramz 2017年

17

ES6 Spread_operatorDestructuring_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
);

ここに画像の説明を入力してください

refs


1

これは次のようにコンパイルされます。

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

上記のように、すべての小道具をに渡しますdiv


1

ES-6の特徴です。それはあなたが小道具のすべての特性を抽出することを意味します div.{... }

演算子は、オブジェクトのプロパティを抽出するために使用されます。


1

子コンポーネントで小道具を使用します

例えば

現在のコンポーネントの小道具が

{
   booking: 4,
   isDisable: false
}

この小道具を子供用コンポネットで使用できます

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

子コンポーネントでは、すべての親の小道具を受け取ります。


良い答えですが、小道具の目的についての説明を含めるとさらに良いでしょう。
マイクプール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.