Qual è il significato di {… this.props} in Reactjs


119

Qual è il significato di

{...this.props}

Sto cercando di usarlo in questo modo

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

Risposte:


201

Si chiama spread attributes e il suo scopo è quello di rendere più facile il passaggio degli oggetti di scena.

Immaginiamo di avere un componente che accetta un numero N di proprietà. Trasmetterli può essere noioso e ingombrante se il numero cresce.

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

Così invece fai questo, avvolgili in un oggetto e usa la notazione diffusa

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

che lo decomprimerà negli oggetti di scena sul tuo componente, cioè, "non" usi mai {... props}all'interno della tua render()funzione, solo quando passi gli oggetti di scena a un altro componente. Usa i tuoi oggetti di scena non imballati normalmente this.props.x.


2
Solo per aggiungere, può essere utile pensarlo come un sostituto this.transferPropsToche è stato deprecato in React 0.12.x e verrà rimosso in 0.13.x. E, naturalmente, permette l'utilizzo molto più avanzato tuttavia semplice traduzione Reagire 0.11.x di this.transferPropsTo(<Foo />)a <Foo {...this.props} />è più utile per le persone che fanno questa transizione.
— Mike Driver

13
Bravo proprietario, ma "non usi" mai "{... props} nella funzione render (), solo quando passi gli oggetti di scena a un altro componente." È un termine di frase molto confuso. Consiglia di riscrivere è come "Usi solo {... props} all'interno del tuo render () quando passi gli oggetti di scena a un altro componente." per chiarezza.
— dprogramz

17

È ES6 Spread_operatore Destructuring_assignment.

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

È uguale a 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
);

inserisci qui la descrizione dell'immagine


o 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
);

inserisci qui la descrizione dell'immagine

refs


1

Compilerà in questo modo:

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

Come puoi vedere sopra, passa tutti i suoi oggetti di scena al file div.


1

È la caratteristica ES-6. Significa che estrai tutte le proprietà degli oggetti di scena in div.{... }

L'operatore viene utilizzato per estrarre le proprietà di un oggetto.


1

Userai oggetti di scena nel tuo componente figlio

per esempio

se i tuoi oggetti di scena adesso sono

{
   booking: 4,
   isDisable: false
}

puoi usare questi oggetti di scena nel tuo bambino compoenet

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

nel tuo componente figlio, riceverai tutti gli oggetti di scena dei tuoi genitori.


Buona risposta ma sarebbe ancora meglio se includessi una spiegazione su cosa sono gli oggetti di scena.
— Mike Poole
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.