"Effect" is one of those words that means something different in every language, so let me be precise about what it means here. Look at a single cycle of a Program running:
inputs, state → program → outputs, state
The outputs are the effects. They are everything the program wants the outside world to do that is not pure calculation: the list of interface components to show, the web requests to make, the animations to run, a line to print. The program does not do any of these itself; it just describes them.
The important thing about those outputs is that they are all interactive. Each of them can, at any moment, hand fresh input back: a user clicks a button, a request completes, a timer fires. When that happens, we simply run the program again with the new input and the previous state, and out comes a new state and a fresh set of outputs.
That is the whole engine. There is no separate event loop for you to write, no update method to remember to call: a change arrives, the cycle turns, and the effects describe themselves anew. Mount, update, unmount - the lifecycle ceremony other systems make you perform - is just the difference between one turn of the cycle and the next. The drivers at the edge are what actually carry the effects out and feed the inputs back in.