Switch page with switch_page(<page_name>) in callback of st.button

The goal is to click on a button that will activate a callback function. This function deals with data processing and utilizes the switch_page function from streamlit-extras to switch pages. However, a warning message appears stating that st.experimental_rerun() is a no-op in the callback. I believe this is because the implementation of switch_page employs the st.experimental_rerun() function.

The callback function is crucial in my scenario since I employ a loop to generate the layout based on a list of data.

I’m wondering for this kind of use case, is there a solution or workaround?

Code snippet:

from streamlit_extras.switch_page_button import switch_page
num_data = len(data) # num_data=50
for i in range(num_data):
    st.write(f"topic: {data[i]['title']}")
    st.button(label="run", 
                   key=current_payload['id'], 
                   on_click=callback_func, 
                   kwargs={"payload": data[i]["payload"], "value": data[i]["value"]})

def callback_func(payload, value):
    # data processing
    switch_page("demo")

Hi @timho102003

Can you try defining the callback function before using it in the for loop.

You can do this by moving the following to be prior to the for loop:

That’s indeed the case. You can hide the warning by setting the configuration option client.showErrorDetails.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.