ความหมายของ {… 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} />เป็นประโยชน์มากที่สุดสำหรับคนที่ทำให้การเปลี่ยนแปลงที่
Mike Driver

13
กันสาดที่ดี แต่ 'คุณ "ไม่เคย" ใช้ {... 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
);

ใส่คำอธิบายภาพที่นี่

refs


1

มันจะรวบรวมสิ่งนี้:

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

ดังที่คุณเห็นด้านบนมันส่งผ่านอุปกรณ์ประกอบฉากทั้งหมดไปยังไฟล์div.


1

เป็นคุณสมบัติ ES-6 หมายความว่าคุณดึงคุณสมบัติทั้งหมดของอุปกรณ์ประกอบฉากออกมา div.{... }

ตัวดำเนินการใช้เพื่อดึงคุณสมบัติของวัตถุ


1

คุณจะใช้อุปกรณ์ประกอบฉากในองค์ประกอบลูกของคุณ

ตัวอย่างเช่น

หากอุปกรณ์ประกอบฉากตอนนี้ของคุณคือ

{
   booking: 4,
   isDisable: false
}

คุณสามารถใช้อุปกรณ์ประกอบฉากนี้ในคอมโพเน็ตสำหรับเด็กของคุณ

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

ในองค์ประกอบลูกของคุณคุณจะได้รับอุปกรณ์ประกอบฉากของพ่อแม่ทั้งหมด


คำตอบที่ดี แต่จะดีกว่านี้หากคุณใส่คำอธิบายว่าอุปกรณ์ประกอบฉากมีไว้เพื่ออะไร
Mike Poole
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.