3 votes

Modifier le comportement des applications ReactJS en externe (pour les expériences d'Optimizely)

Moi et mon équipe utilisons Optimizely pour effectuer des tests A/B. Normalement, nous créons des variations complexes où nous modifions la mise en page et le comportement des pages.

Dernièrement, nous avons commencé à travailler avec un client dont le site est construit sur ReactJS. Alors que le premier test A/B, où il suffisait de modifier certains éléments de la page et de la mise en page, était assez facile, nous avons été confrontés à un défi avec le deuxième test, où nous devions ajouter un élément qui devait affecter le comportement d'autres éléments.

En fait, nous avons une page avec des produits qui a un filtre avec 3 listes déroulantes. Nous avons besoin d'ajouter une liste déroulante supplémentaire, de sorte que lorsque nous changeons l'état de l'une des 4 listes déroulantes, la liste des produits sera modifiée en fonction de l'état actuel de toutes les listes déroulantes.

Le défi est que nous devons le faire "en dehors" de l'application ReactJS (sans modifier le code de l'application en arrière-plan), avec du code JavaScript/jQuery injecté par Optimizely.

La question est donc la suivante : existe-t-il un moyen d'utiliser les objets de l'application ReactJS et leurs méthodes avec un code JS/jQuery injecté en dehors de l'application ?

Notre objectif est de modifier le comportement de la page de la manière décrite ci-dessus, donc toute autre option pour résoudre ce problème sera également utile.

P.S. Pour l'instant, la seule façon de résoudre le problème que nous voyons est de recréer entièrement le filtre en JS/jQuery au lieu d'utiliser le filtre actuel, ce qui n'est pas une solution très efficace. C'est pourquoi je cherche d'autres idées.

1voto

TomFuertes Points 2614

Vous devrez écrire du code personnalisé. Il est difficile, sans plus d'informations, de vous donner une réponse précise car l'écosystème de chacun est très différent. Voici cependant quelques articles qui posent le cadre de l'état de l'union 2017-03 avec Optimizely/React :

  1. Détourner les globaux de React -- poste que j'ai écrit pendant que j'étais à Clearhead
  2. Utilice Activation d'Optimizely à activer dans le cycle de vie du composant
  3. Définissez une variable au niveau de la fenêtre dans votre campagne comme window.variation = 'a' // or 'b' . Utilisez-le ensuite dans votre code pour échanger à chaud des composants. React.render(Components['Component'+(window.variation||'a')))

TLDR il est difficile de modifier l'état de React à moins que vous ne puissiez vous connecter aux internes d'une manière ou d'une autre.

-Tom, directeur technique de CROmetrics. A lancé ~75 tests React au cours des 12 derniers mois.

1voto

Denis Izmaylov Points 11

Il y a plusieurs façons de l'obtenir rapidement. Je vais en décrire quelques-unes ci-dessous.

  1. Si vous utilisez Redux - vous pouvez créer une fonction dans global (= fenêtre) qui enverra une action spécifiée. Voir l'exemple détaillé ici : https://stackoverflow.com/a/41309189/7708957

  2. Si vous n'utilisez pas Redux (par exemple, si vous développez un widget à l'aide de React.js), vous pouvez exposer vos gestionnaires dans le fichier componentDidMount et les détruire dans componentWillUnmount .

Cordialement, Denis

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X