bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


daw_mp06_reactpy

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
daw_mp06_reactpy [2023/06/27 15:51]
armando_mata_urbaneja
daw_mp06_reactpy [2023/06/27 16:02] (actual)
armando_mata_urbaneja
Línia 96: Línia 96:
 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://reactpy.dev/docs/guides/adding-interactivity/index.html#section-2-components-with-state|Components with state]] tens més exemples. 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://reactpy.dev/docs/guides/adding-interactivity/index.html#section-2-components-with-state|Components with state]] tens més exemples.
  
-Un exemple més senzill+Un exemple senzill:
  
 +<code>
 +choices, set_choices = hooks.use_state([])
 +resposta, set_resposta = hooks.use_state("")
 +</code>
  
  
 +Aquí creem dues variable d'estat, la primera inicialitzada amb un array, i la segona amb una cadena de text
    
 +En un mètode que gestioni un esdeveniment podem, per exemple, canviar el seu valor:
 +
 +
 +<code>
 +def handle_choices(event):
 +   set_resposta("Gràcies per la teva resposta")
 +</code>
 +
 +I aquesta variable d'estat renderitzar-se amb el component
 +
 +<code>
 +return html.div(resposta)
 +</code>
 +
 +
 +Cal recordar, que a l'igual que amb ReactJS, un canvi de valor d'una variable d'estat que es rendertiza en l'html, obliga re-rendertizar l'html, sempre sense recàrrega de l'html, ja que és un spa.
 +
 +Finalment indicar que tenim altres hooks, propis de React, com ja he esmentat a l'inici de l'article, però que aquí no detallarem
 +
 +Teniu un [[https://github.com/armandmt/reactpy|repositori de github]] on podeu veure un projecte sencer. En ell es consulta dues API's per oblir dos select
 +
 +A cotinuació es mostra un fragment del codi
 +
 +<code>
 +from reactpy import component,html,hooks   
 +from reactpy.backend.fastapi import  configure
 +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= {"style": {"color": "green"}} if done else {"style": {"color": "red"}}
 +
 +    if done:
 +       return html.li(attr, text)
 +    else:
 +       return html.li(
 +          html.span(attr, text),
 +          html.button({ "on_click": handle_click }," Fet!")
 +       )
 +
 +@component
 +def Todos(items): 
 +   
 +   choices, set_choices = hooks.use_state([])
 +   resposta, set_resposta = hooks.use_state("")
 +
 +   def handle_choices(event):
 +      set_resposta("Gràcies per la teva resposta")
 +
 +   def handle_click(event):
 +      id = event['target']['value']
 +      # obtenim llista de choices
 +      choices_API = requests.get('http://localhost:8002/api/get_choices/'+id)
 +      resultat = choices_API.json()
 +      items_choices= resultat['choices']
 +      set_choices( [
 +        html.option( { "value":i['id']},i['choice_text'])
 +        for i in items_choices
 +      ])
 +
 +   list_item_elements = [
 +      html.option( { "value":i['id']},i['question_text'])
 +      for i in items
 +   ]
 +   return html.div (
 +     html.select({"on_change": handle_click },list_item_elements),
 +     html.select({"on_change": handle_choices },choices),
 +     html.div(resposta)
 +   
 +
 +@component
 +def HelloWorld():
 +    response_API = requests.get('http://localhost:8002/api/get_questions')
 +    resultat = response_API.json()
 +    questions =  resultat['questions']
 +    # for parcial in resultat:
 +    #    print(parcial['question_text'])
 +    for parcial in questions:
 +        print(parcial['question_text'])
 +
 +    return html._(
 +      html.h1("Llista de tasques ! "),
 +      html.div(Todos(questions)),
 +
 +      html.ul(
 +        Item("Aprendre React amb Python", True),
 +        Item("Dominar Django com un pro"),
 +        Item("Sobreviure a un projecte amb Laravel")
 +        
 +      )
 +    )
 +
 +app = FastAPI()
 +configure (app, HelloWorld )
 + 
 +</code>
 +
 +
  
  
daw_mp06_reactpy.1687881115.txt.gz · Darrera modificació: 2023/06/27 15:51 per armando_mata_urbaneja