Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
daw_mp06_reactpy [2023/06/21 17:10] armando_mata_urbaneja |
daw_mp06_reactpy [2023/06/27 16:02] (actual) armando_mata_urbaneja |
||
|---|---|---|---|
| Línia 3: | Línia 3: | ||
| - | {{ :: | + | {{ :: |
| + | |||
| + | React Py és una llibreria que ens permet crear interfaces amb python sense emprar javascript. | ||
| + | |||
| + | Es basa, com fa ReactJS, en components per a construir la interfícies de l' | ||
| + | |||
| + | |||
| + | Tot i així, els navegadors no són capaços d' | ||
| + | |||
| + | Trobaràs la seva documentació a [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Tot i estar força incomplerta podem veure com es codifiquen molts dels elements típics de ReactJS en ReactPy. Des d' | ||
| + | |||
| + | ===== Un primer exemple ===== | ||
| + | |||
| + | La millor forma d' | ||
| + | |||
| + | ==== Instal·lació de dependències ==== | ||
| + | |||
| + | Primer començarem instal·lant les dependències | ||
| + | |||
| + | '' | ||
| + | |||
| + | fastapi només és necessari per a aixecar el projecte | ||
| + | |||
| + | Encabat instal·lem uvicorn, que ens permetrà aixecar l' | ||
| + | |||
| + | '' | ||
| + | |||
| + | ==== Creació del primer component ==== | ||
| + | |||
| + | Després d' | ||
| + | |||
| + | < | ||
| + | from reactpy import component, | ||
| + | from reactpy.backend.fastapi import | ||
| + | from fastapi import FastAPI | ||
| + | |||
| + | #.... | ||
| + | |||
| + | #Al final del codi | ||
| + | app = FastAPI() | ||
| + | configure (app, HelloWorld ) | ||
| + | </ | ||
| + | |||
| + | I creem el primer component | ||
| + | |||
| + | < | ||
| + | @component | ||
| + | def HelloWorld(): | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Observa com el retorn es fa emprant l' | ||
| + | |||
| + | Pots obtenir més informació a | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | Un altre exemple d' | ||
| + | |||
| + | < | ||
| + | html.div( | ||
| + | html.h1(" | ||
| + | html.ul( | ||
| + | html.li(" | ||
| + | html.li(" | ||
| + | ), | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | ==== Esdeveniments ==== | ||
| + | |||
| + | |||
| + | Els elements html també poden rebre esdeveniments, | ||
| + | |||
| + | < | ||
| + | return html.button({" | ||
| + | </ | ||
| + | |||
| + | Tens més exemples a [[https:// | ||
| + | |||
| + | ==== Components amb estat ==== | ||
| + | |||
| + | Com a ReactJS, un dels elements més potents que tenen aquests frameworks són els estats. A ReactPy també tenim aquesta opció, com esmentavem abans, i ens permet renderitzar el nostre SPA a canvis de qualsevol valor. A [[https:// | ||
| + | |||
| + | Un exemple senzill: | ||
| + | |||
| + | < | ||
| + | choices, set_choices = hooks.use_state([]) | ||
| + | resposta, set_resposta = hooks.use_state("" | ||
| + | </ | ||
| + | |||
| + | |||
| + | Aquí creem dues variable d' | ||
| + | |||
| + | En un mètode que gestioni un esdeveniment podem, per exemple, canviar el seu valor: | ||
| + | |||
| + | |||
| + | < | ||
| + | def handle_choices(event): | ||
| + | | ||
| + | </ | ||
| + | |||
| + | I aquesta variable d' | ||
| + | |||
| + | < | ||
| + | return html.div(resposta) | ||
| + | </ | ||
| + | |||
| + | |||
| + | Cal recordar, que a l' | ||
| + | |||
| + | Finalment indicar que tenim altres hooks, propis de React, com ja he esmentat a l' | ||
| + | |||
| + | Teniu un [[https:// | ||
| + | |||
| + | A cotinuació es mostra un fragment del codi | ||
| + | |||
| + | < | ||
| + | from reactpy import component, | ||
| + | from reactpy.backend.fastapi import | ||
| + | from fastapi import FastAPI | ||
| + | |||
| + | import requests | ||
| + | |||
| + | @component | ||
| + | def Item(text, initial_done=False): | ||
| + | done, set_done = hooks.use_state(initial_done) | ||
| + | |||
| + | def handle_click(event): | ||
| + | set_done(not done) | ||
| + | |||
| + | attr= {" | ||
| + | |||
| + | if done: | ||
| + | | ||
| + | else: | ||
| + | | ||
| + | html.span(attr, | ||
| + | html.button({ " | ||
| + | ) | ||
| + | |||
| + | @component | ||
| + | def Todos(items): | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | def handle_choices(event): | ||
| + | set_resposta(" | ||
| + | |||
| + | def handle_click(event): | ||
| + | id = event[' | ||
| + | # obtenim llista de choices | ||
| + | choices_API = requests.get(' | ||
| + | resultat = choices_API.json() | ||
| + | items_choices= resultat[' | ||
| + | set_choices( [ | ||
| + | html.option( { " | ||
| + | for i in items_choices | ||
| + | ]) | ||
| + | |||
| + | | ||
| + | html.option( { " | ||
| + | for i in items | ||
| + | ] | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | ) | ||
| + | |||
| + | @component | ||
| + | def HelloWorld(): | ||
| + | response_API = requests.get(' | ||
| + | resultat = response_API.json() | ||
| + | questions = resultat[' | ||
| + | # for parcial in resultat: | ||
| + | # print(parcial[' | ||
| + | for parcial in questions: | ||
| + | print(parcial[' | ||
| + | |||
| + | return html._( | ||
| + | html.h1(" | ||
| + | html.div(Todos(questions)), | ||
| + | |||
| + | html.ul( | ||
| + | Item(" | ||
| + | Item(" | ||
| + | Item(" | ||
| + | |||
| + | ) | ||
| + | ) | ||
| + | |||
| + | app = FastAPI() | ||
| + | configure (app, HelloWorld ) | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| - | React Py és una llibreria que ens permet crear interfaces amb python sense emprar javascript. Empra, com fa ReactJS, components per a construir l' | ||