add(callback, keep = false) {
        const queueItem = {
            callback,
            keep,
            timeout: null, // keep a reference to the timeout so we can safely delete if afterwards
        };
        queueItem.timeout = setTimeout(() => {
            this.queue.push(queueItem);
        }, 0);

        return queueItem;
    }
Adds a callback to our queue list with a timeout of 0

     params:
     @callback (function): the callback to execute on next render call
     @keep (bool): whether to keep calling that callback on each rendering call or not (act as a setInterval). Default to false

     returns:
     @queueItem: the queue item. Allows to keep a track of it and set its keep property to false when needed
*