We covered State in Interfaces, this guide takes a look at state in Blocks, which works mostly the same.
Global state in Blocks works the same as in Interface. Any variable created outside a function call is a reference shared between all users.
Gradio supports session state, where data persists across multiple submits within a page session, in Blocks apps as well. To reiterate, session data is not shared between different users of your model. To store data in a session state, you need to do three things:
gr.State() object. If there is a default value to this stateful object, pass that into the constructor.State object as an input and output.Let’s take a look at a game of hangman.
import gradio as gr
secret_word = "gradio"
with gr.Blocks() as demo:    
    used_letters_var = gr.State([])
    with gr.Row() as row:
        with gr.Column():
            input_letter = gr.Textbox(label="Enter letter")
            btn = gr.Button("Guess Letter")
        with gr.Column():
            hangman = gr.Textbox(
                label="Hangman",
                value="_"*len(secret_word)
            )
            used_letters_box = gr.Textbox(label="Used Letters")
    def guess_letter(letter, used_letters):
        used_letters.append(letter)
        answer = "".join([
            (letter if letter in used_letters else "_")
            for letter in secret_word
        ])
        return {
            used_letters_var: used_letters,
            used_letters_box: ", ".join(used_letters),
            hangman: answer
        }
    btn.click(
        guess_letter, 
        [input_letter, used_letters_var],
        [used_letters_var, used_letters_box, hangman]
        )
demo.launch()Let’s see how we do each of the 3 steps listed above in this game:
used_letters_var. In the constructor of State, we set the initial value of this to [], an empty list. btn.click(), we have a reference to used_letters_var in both the inputs and outputs.guess_letter, we pass the value of this State to used_letters, and then return an updated value of this State in the return statement.With more complex apps, you will likely have many State variables storing session state in a single Blocks app.
Learn more about State in the docs.