– 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.
So now we have ReactPy? A library for building user interfaces in Python without Javascript.
— GrayHat Mwenda (@HarunMbaabu) June 6, 2023
ReactPy interfaces are made from components that look and behave similarly to those found in ReactJS.
Read more, https://t.co/jDGwfFIqjE
😂😂 pic.twitter.com/T4hIQNKgZZ
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:
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.
Gratulerer med 10-årsdagen, React! Se hvordan det starta
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:
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:
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.
Utbrent PyPi-admin måtte gi opp etter flom av skadevare
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.