2017-04-11 5 views
0

Tout d'abord, je viens pour le fond de php et je suis en train de construire une sorte de middleware réagir, comme je le ferais ce serait quelque chose comme:Rect extension middleware

class Middleware extends React.Component { 
 
    funcOne(data) { 
 
    return data; 
 
    } 
 

 
    funcTwo(data) { 
 
    return (
 
     <div> 
 
     { data } 
 
     <br /> 
 
     { this.funcThree('Third function') } 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
class MyComponent extends Middleware { 
 
    funcOne(data) { 
 
    return `Rewrite of ${data}`; 
 
    } 
 

 
    funcThree(data) { 
 
    return data; 
 
    } 
 

 
    render() { 
 
    return (
 
     <div> 
 
     { this.funcOne('First function') } 
 
     { this.funcTwo('Second function') } 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
class MySecondComponent extends Middleware { 
 
    funcThree(data) { 
 
    return data; 
 
    } 
 

 
    render() { 
 
    return (
 
     <div> 
 
     { this.funcOne('First function') } 
 
     { this.funcTwo('Second function') } 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
ReactDOM.render(
 
    <div> 
 
    <MyComponent /> 
 
    <hr /> 
 
    <MySecondComponent /> 
 
    </div>, 
 
    document.getElementById('root'), 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script> 
 
<div id="root"></div>

Cependant, je ne peux pas vraiment trouver de documentation sur ce qu'il faut faire ou ne pas faire. Alors, est-ce faux? Et si oui, comment dois-je faire à la place?

Répondre

1

Dans votre code mis à jour, il suffit de créer un composant pour funcTwo et passer un accessoire à lui:

function funcOne() { 
    return 'First function'; 
} 

function Two (props) { 
    return (
    <div> 
     Second function 
     <br /> 
     { props.three } 
    </div> 
); 
} 

//... 

    render() { 
    return (
     <div> 
     { funcOne() } 
     <br /> 
     <Two three={this.funcThree()} /> 
     </div> 
    ); 
    } 

Je ne l'ai jamais vu de cas d'utilisation qui doivent utiliser l'héritage dans React. Dans votre cas, créez simplement des composants ou des fonctions simples. En outre, un composant peut aussi être une fonction simple:

cela peut être un composant:

function One (props) { 
    return <h1>hello</h1> 
} 

Vous l'utiliser comme ceci:

<One /> 

Ou, si vous avez juste besoin de chaînes, tout simplement fonctions d'écriture:

function funcOne() { 
    return 'First function'; 
} 

function funcTwo() { 
    return 'Second function'; 
} 

// ... 

    render() { 
    return (
     <div> 
     { funcOne() } 
     <br /> 
     { funcTwo() } 
     </div> 
    ); 
    } 

Vous n'avez donc pas du tout besoin d'héritage. En JavaScript, en particulier React, vous devriez essayer de penser d'une manière plus fonctionnelle. Vous constaterez que c'est très puissant et flexible.

Vous trouverez une documentation officielle sur la composition composant ici: https://facebook.github.io/react/docs/composition-vs-inheritance.html

Je recommande également de lire ceci: https://facebook.github.io/react/docs/thinking-in-react.html

+0

Salut, j'ai simplifié un peu mes composants mais j'ai besoin de composants-fonctions tels que 'componentWillUnmount' aussi bien dans les composants que dans les composants J'aime utiliser le composant "supérieur" dans d'autres composants – Touchpad

+0

Je réponds sans hésiter à cette question - je pense que depuis que j'ai utilisé React, je n'ai jamais * * eu * à sous-classer un composant (et comme le montre le liens vers les docs, ils recommandent activement de ne pas le faire). –

+0

Le composant en question sera largement utilisé tout au long du projet et je ne vois pas vraiment comment le Hoc vous permet d'envoyer des fonctions comme je le souhaitais – Touchpad

0

Ce que vous voulez implémenter est communément appelé un composant d'ordre supérieur. Here est le document détaillé.

+0

Est-ce une composant d'ordre supérieur ont accès aux fonctions du composant d'ordre inférieur? (mis à jour ma question initiale) – Touchpad

+0

Non, il ne sera pas, les composants d'ordre supérieur envelopper les composants qui ont des méthodes partagées.Pour que vous n'ayez pas à écrire les mêmes méthodes lors de l'implémentation de ces composants d'ordre inférieur. Qu'est-ce que vous essayez de faire, n'est-ce pas? –

+0

Je suis fondamentalement en train d'essayer de créer un "gestionnaire" pour toutes les données que j'envoie dedans, puis j'ai une chance de modifier le gestionnaire si nécessaire. – Touchpad

0

Je pense que la façon dont vous ne réutilisez réagir dans le monde est en créant des fonctions qui prennent Composer et retourner un nouveau composant avec des fonctionnalités supplémentaires, en l'enveloppant dans un composant qui ajoute des fonctionnalités. Cela peut être fait en transmettant le composant que vous souhaitez "dériver" à une fonction ou en l'enveloppant directement dans un composant "wrapper" et en accédant au composant "wrapped" dans la propriété props.children.

const componentWithDropTargetCapabilities = addDragAndDrop(MyComponent) 

ou

<DropTarget> 
    <MyComponent /> 
</DropTarget> 

Ceux-ci sont appelés "composants d'ordre supérieur" (HOC): https://facebook.github.io/react/docs/higher-order-components.html

Jetez un oeil ar réagir-routeur Code par exemple: https://github.com/ReactTraining/react-router

+0

De la façon dont je lis Hoc cela ne fonctionnera pas avec ma version mise à jour de ma question ou est-ce que je manque quelque chose? – Touchpad

+0

Pas vraiment clair ce que vous essayez d'atteindre. La sortie de l'extrait de question est-elle correcte? Pouvez-vous articuler le cas d'utilisation réel? –

+0

Mon scénario optimal serait un "mockup" Component avec les fonctionnalités de base où je peux envoyer des données, puis faire le composant faire des choses mais je veux la possibilité de modifier certaines étapes sans avoir à modifier/ajouter à la "supérieure" composant dans ces cas-là, j'ai besoin d'agir un peu différemment – Touchpad