In your example what you are doing is preventing a dependency on either :
myValues$List
or
input$txt
...removing isolate from around myValues$List would cause your app not to not do anything.
This next one makes the role of isolate more obvious:
...removing isolate from around input$txt would cause your app to add to the list anytime text is entered after the first time "add" is pressed by causing the following observe to reevaluate every time input$text is changed :
observe({
if(input$add > 0){
myValues$List <- c(isolate(myValues$List), isolate(input$txt))
}
})
In this case, however, it would be simpler to use observeEvent:
myValues <- reactiveValues()
observeEvent(input$add, {
myValues$List <- c(myValues$List, input$txt)
})