Что означает {… this.props} в Reactjs


119

Каково значение

{...this.props}

Я пытаюсь использовать это так

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

Ответы:


202

Это называется атрибутами распространения, и его цель - упростить передачу реквизита.

Представим, что у вас есть компонент, который принимает 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
Хороший awnser, но «вы« никогда »не используете {... props} внутри вашей функции render (), только когда вы передаете props другому компоненту». Это очень запутанный термин. Рекомендуется переписать следующее: «Вы используете {... props} внутри вашего render () только тогда, когда вы передаете props другому компоненту». для ясности.
— dprogramz

17

Это 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
);

введите описание изображения здесь

рефов


1

Он будет компилироваться так:

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

Как вы можете видеть выше, он передает все свои реквизиты в div.


1

Это особенность ES-6. Это означает, что вы извлекаете все свойства реквизита в div.{... }

Оператор используется для извлечения свойств объекта.


1

Вы будете использовать props в своем дочернем компоненте

например

если ваш теперь компонент props

{
   booking: 4,
   isDisable: false
}

Вы можете использовать этот реквизит в своем детском сообществе

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

в вашем дочернем компоненте вы получите все свои родительские реквизиты.


Хороший ответ, но было бы еще лучше, если бы вы включили объяснение, для чего нужны реквизиты.
— Майк Пул
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.