JSFiddle - React, Tailwind, and code Playground

JavaScript

function Looper() {
    this.loops = {};
    this.start = function(name, fn, interval, params) {
        this.loops[name] = setInterval(function() {
            fn.apply(null, params);  // maybe bind the function?
        }, interval);
    };
    this.stop = function(name) {
        clearInterval(this.loops[name]);
    };
}

function say(name, msg) {
    console.log(name,':',msg);
}

function shout(name, msg) {
    console.log(name,':',msg.toUpperCase());
}

var looper = new Looper();
looper.start('say', say, 1000, ['clock', 'tick']);
looper.start('shout', shout, 2000, ['clock', 'tack']);

setTimeout(function() {
    looper.stop('shout');
}, 5000);