[英]React HOC and accessing props
我試圖理解下面的 React HOC;
const withSecretToLife = (WrappedComponent) => {
class HOC extends React.Component {
render() {
return (
<WrappedComponent
{...this.props}
secretToLife={42}
/>
);
}
}
return HOC;
};
export default withSecretToLife;
下面是另一個組件;
import withSecretToLife from 'components/withSecretToLife';
const DisplayTheSecret = props => (
<div>
The secret to life is {props.secretToLife}.
</div>
);
const WrappedComponent = withSecretToLife(DisplayTheSecret);
export default WrappedComponent;
具體來說,我想了解
<WrappedComponent />
或<DisplayTheSecret />
或者它們中的任何一個都可以被消費?您創建一個新組件 - WrappedComponent
。 它得到了道具secretToLife
。 DisplayTheSecret
本身沒有secretToLife
。
在一般實踐中,您應該使用上面已經定義的變量。 所以 DisplayTheSecret 應該定義在它的用法之上。 但是,您可以隨意使用它,因為變量和函數會自動提升到 scope 的頂部。
您可以這樣做,但它可能會在運行時導致錯誤。 如果您決定使用DisplayTheSecret
組件而不用HOC
包裝它。 Typescript
通過在開發過程中生成類型來解決這些問題。
WrappedComponent
由DisplayTheSecret
和HOC
組成。
DisplayTheSecret
是一個簡單的組件,它希望在其屬性中找到secretToLife
。
withSecretToLife
是一個 function 接受WrappedComponent
並返回另一個組件(我們稱之為WrappingHOC
)
WrappingHOC
返回WrappedComponent
傳遞給withSecretToLife
,傳遞它自己的所有 props 並添加一個新的 - secretToLife
const WrappedComponent = withSecretToLife(DisplayTheSecret);
- 這個也叫 WrappedComponent,但和上面的WrappedComponent
(傳給函數的那個)不一樣,是WrappingHOC
和DisplayTheSecret
我們就叫它ResultingComponent
所以:
secretToLife
是ResultingComponent
傳遞給DisplayTheSecret
的屬性
順序很重要,在開始使用之前聲明 function 總是一個好主意
secretToLife
是一個普通屬性,你在創建組件時聲明它
DisplayTheSecret
沒有被導出,所以不能在模塊之外使用,除了它可以不用包裝就可以使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.