J'ai le code suivant qui encapsule une fonction pour fournir du contexte aux composants enfants, cependant, lorsque j'essaye de rendre ceci, cela échoue, mon composant enveloppé ne rend pas, dans React 16.6.3
import addToWishListButtonWrapper from 'src/components/wishlist_button' <addToWishListButtonWrapper> <WishlistButton> {' '}{wishlistSuccess ? 'Added!' : 'Add to Wishlist'} </WishlistButton> </addToWishListButtonWrapper>
3 Réponses :
Vous n'utilisez pas correctement le HOC. Vous devez créer une instance du composant comme
<AddToWishListButtonWrapper> {() => ( <WishlistButton> {' '}{wishlistSuccess ? 'Added!' : 'Add to Wishlist'} </WishlistButton> )} </AddToWishListButtonWrapper>
import React from 'react' export const WishlistContext = React.createContext(null) const AddToWishListButtonWrapper = (WrappedComponent) => { return class WishlistButton extends React.Component { state = {token: null, wishlistItems: []} render() { const {token, wishlistItems} = this.state const { children } = this.props; return ( <WishlistContext.Provider value={wishlistItems}> {children()} </WishlistContext.Provider> ) } } } export default AddToWishListButtonWrapper
et la rendre comme
<WrapComponent />
ou au lieu de HOC, vous pouvez utiliser le modèle d'accessoires de rendu
comme
const MyComp = () => ( <WishlistButton> {' '}{wishlistSuccess ? 'Added!' : 'Add to Wishlist'} </WishlistButton> ) const WrapComponent = AddToWishListButtonWrapper(MyComp)
import React from 'react' export const WishlistContext = React.createContext(null) const AddToWishListButtonWrapper = (WrappedComponent) => { return class WishlistButton extends React.Component { state = {token: null, wishlistItems: []} render() { const {token, wishlistItems} = this.state return ( <WishlistContext.Provider value={wishlistItems}> <WrappedComponent {...this.props} /> </WishlistContext.Provider> ) } } } export default AddToWishListButtonWrapper
Génial. Merci. Je ne sais pas pourquoi j'ai essayé de le structurer de cette façon, l'élément minuscule, je suppose, fait un élément wrapper html vide, et cela m'a confus.
Heureux d'avoir aidé (y)
Le HOC AddToWishListButtonWrapper
est une fonction javascript. Il attend de vous que vous l'appeliez en tant que fonction et que vous fournissiez un composant comme argument
Vous devez l'utiliser quelque chose comme ceci (j'ai fait le cas de AddToWishListButtonWrapper petit car c'est la convention) -
<EnhancedWishList />
Vous pouvez utiliser HOC comme suit:
class WishlistButton extends Component{ -- component logic } export default AddToWishListButtonWrapper(WishlistButton);