Configuración de Feature Flags con React

Rate this content
Bookmark

Como desarrolladores, lanzamos características a diario, pero ¿cómo aseguramos que esas características funcionen correctamente en producción antes de lanzarlas a todos los usuarios? Si me preguntas, la respuesta son los feature flags. Los feature flags son beneficiosos porque te permiten probar tu código en producción, realizar lanzamientos canarios e incluso realizar pruebas A/B. El poder de React facilita la implementación de estos flags. Te guiaremos en cómo crear fácilmente un feature flag en la interfaz de usuario, instalar dependencias con npm e implementar tu feature flag en tu aplicación de React.

7 min
14 May, 2021

Video Summary and Transcription

Esta charla discute la configuración de feature flags con React, lo cual permite lanzamientos controlados de nuevas características. Los feature flags brindan más control sin necesidad de modificar el código fuente y pueden dirigirse a usuarios específicos o tipos de usuarios. En React, los feature flags pueden crearse y configurarse utilizando Split.io. Se pueden aplicar diferentes tratamientos para determinar si una característica debe mostrarse. El feature flagging brinda control y flexibilidad en el desarrollo.

Available in English

1. Configuración de las banderas de características con React

Short description:

Hoy vamos a hablar sobre la configuración de las banderas de características con React. Digamos que soy un desarrollador de front-end que trabaja en esta aplicación de lista de tareas. Y en este momento, los usuarios solo tienen la capacidad de agregar tareas a la lista. Y quiero agregar la capacidad de eliminar tareas. Y agregar esta característica requiere trabajo en el back-end también porque necesitamos un nuevo punto de conexión de API. Y no sé si el cambio en el back-end estará listo a tiempo. Pero esto es lo que he hecho hasta ahora. Tengo esta declaración condicional configurada. Y de forma predeterminada, al usuario no se le permite eliminar. Esta es la situación actual. Y cuando estoy probando esta característica localmente, cambio este booleano a verdadero para probar cosas. Y una vez que el back-end esté listo y quiero que mis usuarios puedan ver el botón de eliminar, simplemente voy a hacer este commit con el booleano igual a verdadero. Y en este momento, esto está funcionando.

Así que quiero comenzar estableciendo el escenario un poco. Digamos que soy un desarrollador de front-end que trabaja en esta aplicación de lista de tareas. Y en este momento, los usuarios solo tienen la capacidad de agregar tareas a la lista. Y quiero agregar la capacidad de eliminar tareas. Y agregar esta característica requiere trabajo en el back-end también porque necesitamos un nuevo punto de conexión de API. Y no sé si el cambio en el back-end estará listo a tiempo. Pero esto es lo que he hecho hasta ahora. Tengo esta declaración condicional configurada. Y de forma predeterminada, al usuario no se le permite eliminar. Esta es la situación actual. Y cuando estoy testing esta característica localmente, cambio este booleano a verdadero para probar cosas. Y una vez que el back-end esté listo y quiero que mis usuarios puedan ver el botón de eliminar, simplemente voy a hacer este commit con el booleano igual a verdadero. Y en este momento, esto está funcionando.

2. Uso de banderas de características para implementaciones controladas

Short description:

Una vez que el back-end esté listo, puedo hacer un commit para habilitar el botón de eliminar. Las banderas de características tienen varios casos de uso, incluyendo pruebas en producción, interruptores de apagado, migración de microservicios, pruebas AB, gestión de suscripciones, lanzamientos de canarios y experimentación. Las banderas de características mejoran el desarrollo, las pruebas y la entrega de nuevas características mientras se minimizan los riesgos. También permiten medir el impacto de los cambios y tener control sobre la experiencia del usuario sin necesidad de hacer commits de código.

Y una vez que el back-end esté listo y quiero que mis usuarios puedan ver el botón de eliminar, entonces simplemente haré un commit con el booleano igual a verdadero. Y lo genial de esto es que si hay errores con la API del back-end, es relativamente fácil para mí revertir temporalmente esta implementación. Así que lo que hemos creado aquí es solo un ejemplo muy básico de una bandera de características. Implementación de código a partir de la implementación de características. Y acabamos de ver un ejemplo de cómo queremos usar esto, pero hay muchas otras formas de usar las banderas de características, por lo que podemos usarlas para probar en producción, podemos usarlas como un interruptor de apagado para desactivar características en producción que no funcionan. Puedes usarlas para migrar tus microservicios de forma segura. Si tienes un monolito, puedes usar esto para migrar tus microservicios a microservicios. Y luego puedes usar esto para pruebas AB, gestión de suscripciones, lanzamientos de canarios y experimentación. Y ¿por qué nos importan estos casos de uso? Es porque las banderas de características mejoran tu capacidad para desarrollar, probar y entregar nuevas características mientras se minimizan los riesgos en todo el proceso. Y así es como mides el impacto de tus cambios. Entonces, el uso de banderas de características te permite correlacionar directamente el impacto de tus cambios al enviar información sobre las banderas de características a tu sistema analítico interno. Y al usar una aplicación de gestión de banderas de características, puedes establecer quién puede ver qué características sin tener que hacer nuevos commits de código. Y esto es realmente genial para los propietarios de productos y personas no técnicas porque pueden controlar la experiencia del usuario sin tener que pedir a los desarrolladores que hagan nuevos commits de código.

3. Implementación de banderas de características controladas

Short description:

Quiero implementar esta funcionalidad de eliminación de forma controlada utilizando banderas de características. Con un sistema de banderas de características, obtengo más control sin necesidad de modificar el código fuente. Puedo dirigirme a usuarios específicos o tipos de usuarios. El tratamiento controla quién puede eliminar tareas. Cuando el tratamiento está activado, el usuario puede eliminar tareas, y cuando está desactivado, no puede.

Y así, una vez más, quiero implementar esta funcionalidad de eliminación de forma controlada utilizando banderas de características. Y así, la cosa básica de la bandera de características que tenía antes, esa declaración if-else, estaba bien, pero si uso un sistema de banderas de características, obtengo mucho más control y no tengo que modificar el código fuente. Además, puedo dirigirme a usuarios específicos o tipos de usuarios en Split. Y así, estos posibles estados de lo que el usuario puede ver se llaman tratamientos. Y así, para esta aplicación de demostración, el tratamiento controla quién puede eliminar tareas. En nuestro caso, cuando el tratamiento está activado, el usuario podrá eliminar tareas, y cuando el tratamiento está desactivado, el usuario no podrá eliminar tareas. Y esto es cómo se ve en cada caso.

4. Creación y configuración de banderas de características en React

Short description:

En React, en lugar de codificar la capacidad de eliminar, podemos crear una bandera de características. Para crear una bandera de características, inicia sesión en Split.io y crea un split. Instala las dependencias necesarias e importa el SDK de JavaScript. Utiliza el componente de tratamientos de split para evaluar la característica y el componente de fábrica de split para envolver el componente de lista de tareas. Diferencia entre el tratamiento activado y desactivado para determinar si se debe mostrar la opción de eliminar. Configura la instancia de split con la clave de autenticación del usuario. Cuando se dirige en la bandera de características, los botones de eliminación serán visibles. Establece debug en true para ver los registros en la consola. Si el usuario no está dirigido, los botones de eliminación no aparecerán. La bandera de características proporciona control y flexibilidad en el desarrollo. Para obtener más información, visita split.io.

Y así, una vez más, lo que tenía antes, esto es una forma realmente chapucera de hacer esto porque estoy codificando si el usuario puede eliminar o no. Esta es la forma correcta de hacerlo en React donde, dependiendo del valor de la propiedad, mostrarás o no el botón de eliminar. Y así, lo que vamos a hacer hoy es crear una bandera de características, instalar las dependencias, e instanciar y utilizar el SDK.

Entonces, para crear una bandera de características, simplemente iniciarás sesión en Split. Así que lo único que tienes que hacer es ir a Split.io, hacer clic en crear cuenta de desarrollador gratuita y seguir ese proceso. Y luego verás en el panel izquierdo, verás un botón que dice crear split. Y un split es solo otro nombre para una bandera de características, así que querrás darle un nombre, algo que sea identificable de manera única. Y luego en mi ejemplo, estoy diciendo que quiero que yo y los desarrolladores podamos eliminar, así que todos los demás obtienen el comportamiento predeterminado existente de solo poder agregar tareas.

A continuación, voy a instalar mis dependencias y configurar mi aplicación React. Así que después de crear mi aplicación React con create React app, lo único que voy a hacer es instalar la siguiente dependencia en mi carpeta raíz. Y luego voy a instanciar y utilizar el SDK. Lo primero que voy a hacer es importar el SDK de JavaScript. Así que en la parte superior de mi componente, voy a importar los tratamientos de split y la fábrica de split. Así que los tratamientos de split es un componente de React que realiza la evaluación de características, y lo vamos a usar en nuestra función de renderizado. Y luego el componente de fábrica de split se utiliza para envolver el componente de lista de tareas cuando lo exporto. Y luego divido mi función de renderizado en dos. Y en la primera, devuelvo el tratamiento y la configuración de los tratamientos de split. Y en la prop names, paso el nombre de la bandera de características que creé desde la interfaz de usuario. En la segunda función de renderizado, creo una variable llamada allow delete que diferencia entre el tratamiento activado y desactivado. Si los tratamientos están activados, se mostrará la opción de eliminar tareas y si el tratamiento está desactivado, no habrá opción de eliminar. Y luego tengo una función llamada create tasks que se llama en mi función de renderizado y renderiza condicionalmente el botón de eliminar. Si la variable allow delete está configurada en true. Después de las funciones de renderizado, está la configuración que vas a utilizar para configurar tu instancia de split. Entonces, lo que hace es inicializar con la fábrica de split, que es el punto de entrada de la biblioteca. Cada usuario tendrá su propia clave de autenticación y puedes encontrar la tuya en la interfaz de usuario. Entonces, el parámetro key le está diciendo a split quién es el usuario actual. Así que en este caso, cuando ejecutes npm start, verás los botones de eliminar porque estás dirigido en la bandera de características. Cuando estableces debug en true, puedes ver todos los registros de split en la consola del navegador. Debes prestar atención a dos cosas aquí. Una es que puedes ver claramente que soy la persona que está recibiendo el tratamiento. La segunda es que puedes ver que el tratamiento está activado para mí. Ahora observa qué sucede cuando cambias la clave a un usuario de prueba que no está en el split. Los botones de eliminar desaparecen porque el usuario no está dirigido. Recuerda que solo los desarrolladores y yo lo estamos. Observa en los registros de la consola que claramente veo que el tratamiento está desactivado y ahora estoy obteniendo el comportamiento predeterminado o existente porque no he iniciado sesión. Estoy iniciado sesión como alguien que no está dirigido. Espero que este ejemplo haya sido una forma clara de ver el valor de las banderas de características. Así que las banderas de características, si tienes más preguntas, dirígete a split.io y consulta algunos de nuestros blogs y publicaciones. ¡Gracias chicos!

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
TestJS Summit 2021TestJS Summit 2021
33 min
Network Requests with Cypress
Top Content
Whether you're testing your UI or API, Cypress gives you all the tools needed to work with and manage network requests. This intermediate-level task demonstrates how to use the cy.request and cy.intercept commands to execute, spy on, and stub network requests while testing your application in the browser. Learn how the commands work as well as use cases for each, including best practices for testing and mocking your network requests.

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn