Skip to content

Instantly share code, notes, and snippets.

View prdxs's full-sized avatar

Rubén Fernández-Butrón prdxs

View GitHub Profile
export default function useData(initData) {
const [data, setData] = useState(initData);
useEffect(() => {
const intervalId = setInterval(async () => {
const newData = await fetch('https://data-api.com/getData').then(response => response.json());
setData(newData);
}, 50000);
return () => {
clearInterval(intervalId);
};
const PerfClicksButton = memo(({ className, style, children }) => {
const [clicks, setClicks] = useState(0);
const handleClick = useCallback(() => setClicks((clicks) => clicks + 1), []);
return (
<button
className={clsx('ClicksButton', className)}
style={style}
onClick={handleClick}
>
{children} {clicks}
class PerfClicksButton extends PureComponent {
constructor(props) {
super(props);
this.state = {
clicks: 0,
};
}
handleClick = () => {
this.setState(({ clicks }) => ({
clicks: clicks + 1,
class PerfClicksButton extends Component {
constructor(props) {
super(props);
this.state = {
clicks: 0,
};
}
shouldComponentUpdate(nextProps, nextState) {
const sameClassName = nextProps.className === this.props.className;
const sameStyle = nextProps.style === this.props.style;
class StoppableClock extends Component {
constructor(props) {
super(props);
this.state = {
time: new Date().toLocaleTimeString(),
isRunning: true,
};
}
componentDidMount() {
this.intervalId = setInterval(() => {
class StoppableClock extends Component {
constructor(props) {
super(props);
this.state = {
time: new Date().toLocaleTimeString(),
isRunning: true,
};
}
componentDidMount() {
this.intervalId = setInterval(() => {
function StoppableClock({ className, style }) {
const [time, setTime] = useState(new Date().toLocaleTimeString());
const [isRunning, setIsRunning] = useState(true);
const toggle = useCallback(() => {
setIsRunning(isRunning => !isRunning);
}, []);
useEffect(() => {
if (isRunning) {
const intervalId = setInterval(() => {
setTime(new Date().toLocaleTimeString());
function Clock({ className, style }) {
const [time, setTime] = useState(new Date().toLocaleTimeString());
useEffect(() => {
setInterval(() => {
setTime(new Date().toLocaleTimeString());
}, 1000);
}, []);
return (
<span
className={clsx('Clock', className)}
class Clock extends Component {
constructor(props) {
super(props);
this.state = {
time: new Date().toLocaleTimeString(),
};
}
componentDidMount() {
setInterval(() => {
this.setState({ time: new Date().toLocaleTimeString() });
function ClicksButton({ className, style }) {
const [clicks, setClicks] = useState(0);
const handleClick = useCallback(() => setClicks((clicks) => clicks + 1), []);
return (
<button
className={clsx('ClicksButton', className)}
style={style}
onClick={handleClick}
>
Clicks {clicks}