now requires react (works in node, and the browser)