Skip to content

Instantly share code, notes, and snippets.

@MaximeHeckel
MaximeHeckel / Example.js
Last active April 6, 2022 22:11
Example of App replacing Redux with Context and Hooks
// reducer.js
export const initialState = {
data: null
};
const reducer = (state, action) => {
const reduced = { ...state };
switch (action.type) {
case "FETCH_DATA":
return {
@MaximeHeckel
MaximeHeckel / log.txt
Created September 18, 2020 20:31
Logs showcasing an unexplained behavior of SwiftUI's PageTabViewStyle(): pages keep getting rendered even when not visible and is limited somehow up to 3 views. Once we swipe more than 3 times the .onDisappear modifier is called on the "oldest" view
Page 0 appear
SWIPE
Page 1 appear
SWIPE
Page 2 appear
import React from "react";
const Announcements = (props) => {
return (
<div aria-live="polite" aria-atomic="true"
className="visuallyhidden">
{props.message}
</div>
);
import { ThemeProvider as EmotionThemeProvider } from 'emotion-theming';
import React from 'react';
import themeDark from '../theme_dark';
import themeLight from '../theme_light';
interface InterfaceState {
dark: boolean;
toggleDark: () => void;
}
@MaximeHeckel
MaximeHeckel / sequencePromise.js
Last active November 21, 2018 04:34
A quick implementation to allow running a given set of promises in sequence
const sequence = ['arg1', 'arg2','arg3'].reduce(async (previousPromise, nextArg) => {
await previousPromise;
return somePromise(nextArg)
}, Promise.resolve());
sequence
.then(() => console.log('Done'))
.catch((e) => console.error(`An error occured: ${e}`));
@MaximeHeckel
MaximeHeckel / App.js
Created October 30, 2018 02:18
Basic React Hooks examples
import React, { useState, useContext, useEffect, createContext } from "react";
import logo from "./logo.svg";
import "./App.css";
const CounterContext = createContext(0);
const Hello = () => {
// This avoids render props and the use of Context.Consumer
// way easier!
const count = useContext(CounterContext);
@MaximeHeckel
MaximeHeckel / suspense-demo.js
Last active October 25, 2018 05:02
Using React without classes!
import React, { Suspense, Fragment } from "react";
import { createCache, createResource } from "simple-cache-provider";
const cache = createCache();
const createFetcher = callback => {
const resource = createResource(callback);
return () => resource.read(cache);
};
@MaximeHeckel
MaximeHeckel / Article.js
Last active August 17, 2018 20:02
Medium - React "sub-component" - Title sub-component
import React, { Component } from 'react';
import findByType from './findByType';
import css from './somestyle.css';
// We instantiate the Title sub-component
const Title = () => null;
class Article extends Component {
// This is the function that will take care of rendering our Title sub-component
renderTitle() {
const { children } = this.props;
// First we try to find the Title sub-component among the children of Article
@MaximeHeckel
MaximeHeckel / findByType.js
Last active August 17, 2018 20:02
Medium - React "sub-components" - findByType function
import React from 'react';
const findByType = (children, component) => {
const result = [];
/* This is the array of result since Article can have multiple times the same sub-component */
const type = [component.displayName] || [component.name];
/* We can store the actual name of the component through the displayName or name property of our sub-component */
React.Children.forEach(children, child => {
const childType =
child && child.type && (child.type.displayName || child.type.name);
if (type.includes(childType)) {
@MaximeHeckel
MaximeHeckel / Article.js
Last active August 6, 2018 05:44
Medium - React "sub-components" - Article sub-components full
// @flow
import React, { Component } from 'react';
import type { Node } from 'react';
import findByType from './findByType';
import css from './styles.css';
const Title = () => null;
const Subtitle = () => null;
const Metadata = () => null;
const Content = () => null;