ReactPy: Nå kan du lage React-apper med Python

Nytt prosjekt gir deg hooks og alt du kjenner fra moderne React, men med Python som programmeringsspråk.

Liker du både Python og React? Nå får du det beste (eller verste?) fra begge verdener. 📸: Kurt Lekanger
Liker du både Python og React? Nå får du det beste (eller verste?) fra begge verdener. 📸: Kurt Lekanger Vis mer

All hells combined!

Det var den umiddelbare reaksjonen til en Reddit-bruker da utviklerne bak ReactPy for et par måneder siden annonserte sitt nye bibliotek som kombinerer React og Python.

– Den raskeste måten å bygge en veldig treg app, uttalte en Twitter-bruker.

Men det har også vært en masse positive reaksjoner på ReactPy, som kort fortalt lar deg lage brukergrensesnitt ved hjelp av komponenter som ser ut som og oppfører seg som JavaScript-baserte React-komponenter.

Som React, men likevel ikke...

ReactPy er ikke mange månedene gammelt, men har allerede rukket å få nesten 4000 stjerner på GitHub.

På prosjektets GitHub-repo står det at ReactPy er designet for å være enkelt å bruke, og at det dermed er mulig for Python-programmere uten erfaring med web-utvikling å komme raskt igang.

Slik ser Hello World ut med ReactPy:

image: ReactPy: Nå kan du lage React-apper med Python

I kodesnutten over importeres først component, html og run fra reactpy-pakken. Deretter defineres en App()-funksjon som returnerer HTML.

Mye av hemmeligheten ligger i @component-dekoratøren rett før funksjonsdefinisjonen. Det er denne som gjør om funksjonen til en ReactPy-komponent. I prinsippet er komponenter bare vanlige Python-funksjoner som returnerer HTML.

Vil du ha en h1.tag, skriver du bare html.h1. Vil du lage en liste, bruker du html.ul, html.li, og så videre.

Du kan nøste komponenter

Som i vanlig JavaScript-basert React kan du lage så mange komponenter du vil, gjenbruke dem rundtomkring i koden din, og nøste dem inni andre komponenter.

For eksempel kan du lage en komponent for å vise et bilde, og så bruke denne komponenten inne i en annen komponent. Her er et eksempel fra ReactPy-dokumentasjonen:

image: ReactPy: Nå kan du lage React-apper med Python

I vanlig React ville du brukt JavaScripts array-metode .map for å loope over en liste med elementer og vise disse på skjermen. Du gjør det på en lignende måte med ReactPy.

Eksempelet under viser hvordan du kan lage en komponent som tar imot en Python-liste (tilsvarende et JS-array) og returnerer et <ul>-element med en masse <li>-elementer inni:

image: ReactPy: Nå kan du lage React-apper med Python

Støtter hooks

I likhet med vanlig React kan du bruke props for å sende data inn til komponenter.

De innebygde hooks-ene fra vanlig React er også implementert i ReactPy. For å lage en tilstandsvariabel med en tilhørende "setter" kan du gjøre dette:

value, set_value = hooks.use_state("")

Og så er det bare å bruke value der du vil, og set_value("ett eller annet") når du vil endre den senere. Ganske likt vanlig React, med andre ord. Det er også use_effect- og use_context-hooks.

Serverside-rendret

Komponentene du lager bør være "pure", altså ikke ha noen sideeffekter. Derfor anbefaler ReactPy at du gjør eventuelle API-kall eller henting av data fra databaser inne i ReactPy sin use_effect-hook.

For at alt sammen skal være kompatibelt med alle Python-pakker, er ReactPy ifølge utviklerne serverside-rendret.

«Vi har sett at effektiviteten er omtrent tilsvarende ReactJS.»

Til utviklere som er bekymret for om Python-baserte React-apper kommer til å være trege, svarer en av ReactPy-utviklerne følgende på Reddit:

– Vi har sett at effektiviteten er omtrent tilsvarende ReactJS. For å være helt ærlig, så er ikke ReactJS akkurat et rammeverk med veldig høy ytelse.

Den eneste måten å finne ut om det stemmer eller ikke, er å prøve det ut selv.

Hvis du vil teste ut ReactPy, kan du enten prøve det ut med ReactPy sine egne eksempler i denne Jupyter-notisblokken, eller ta en tur innom ReactPys installasjonsveiledning her.