1
0
mirror of synced 2025-12-20 10:28:40 -05:00
Files
docs/react/Timer.js
Chiedo b781e43893 Add experimental react support within markdown
Also added fronmatter for interactive: true to turn on React on a file by file
basis and prevent slowing down the builds for non-react files
2020-10-18 14:44:34 -04:00

57 lines
1.4 KiB
JavaScript

const React = require('react')
const ReactDOM = require('react-dom')
const { useState, useEffect } = require('react')
const Timer = () => {
const [seconds, setSeconds] = useState(0);
const [isActive, setIsActive] = useState(false);
function toggle() {
setIsActive(!isActive);
}
function reset() {
setSeconds(0);
setIsActive(false);
}
useEffect(() => {
let interval = null;
if (isActive) {
interval = setInterval(() => {
setSeconds(seconds => seconds + 1);
}, 1000);
} else if (!isActive && seconds !== 0) {
clearInterval(interval);
}
return () => clearInterval(interval);
}, [isActive, seconds]);
return (
<div className="app">
<div className="time">
{seconds}s
</div>
<div className="row">
<button className={`button button-primary button-primary-${isActive ? 'active' : 'inactive'}`} onClick={toggle}>
{isActive ? 'Pause' : 'Start'}
</button>
<button className="button" onClick={reset}>
Reset
</button>
</div>
</div>
);
};
if (typeof window === 'undefined') {
} else {
const componentContainers = document.querySelectorAll('.react-component-Timer')
for (const componentContainer of componentContainers) {
ReactDOM.render(React.createElement(Timer, {}, componentContainer.children[0].innerText), componentContainer)
}
}
module.exports = Timer