Skip to content

Instantly share code, notes, and snippets.

View hckhanh's full-sized avatar
🍊
Peace

Khánh Hoàng hckhanh

🍊
Peace
View GitHub Profile
@hckhanh
hckhanh / CommentList.js
Last active February 9, 2019 14:09
higher-order component injected
import React, { Component } from "react";
import DataSource from "../DataSource";
import withSubscription from "./withSubscription";
const Comment = ({ comment }) => <>{comment}</>;
class CommentList extends Component {
render() {
return (
<>
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:08
Full stateful implementation
import React, { Component } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export class BlogPost extends Component {
constructor(props) {
super(props);
this.state = {
data: DataSource.getBlogPost(props.id)
@hckhanh
hckhanh / EditableItem.js
Created February 9, 2019 13:24
Need manage editMode state
import PropTypes from 'prop-types';
import React, { Component, Fragment } from 'react';
import EditModeItem from './EditModeItem';
import './style.scss';
import ViewModeItem from './ViewModeItem';
export default class EditableItem extends Component {
constructor(props) {
super(props);
this.state = { editMode: false };
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:07
Use useState instead of class component
import React, { useState } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export function BlogPost({ id }) {
// State is declared in pair: state value and setState function
const [data, setData] = useState(DataSource.getBlogPost(id));
return <TextBlock text={data} />;
@hckhanh
hckhanh / EditableItem.js
Last active February 9, 2019 13:45
editMode will be declared inline
import PropTypes from 'prop-types';
import React, { Fragment, useState } from 'react';
import EditModeItem from './EditModeItem';
import './style.scss';
import ViewModeItem from './ViewModeItem';
export default function EditableItem({ data }) {
const [editMode, setEditMode] = useState(false);
return (
<Fragment>
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:07
Use useEffect to handle componentDidMount
import React, { useEffect, useState } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export function BlogPost({ id }) {
// State is declared in pair: state value and setState function
const [data, setData] = useState(DataSource.getBlogPost(id));
// Similar to componentDidMount and componentDidUpdate:
@hckhanh
hckhanh / BlogPost.js
Created February 9, 2019 14:19
Handle componentWillUnmount() logic for DataSource
import React, { useEffect, useState } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export function BlogPost({ id }) {
// State is declared in pair: state value and setState function
const [data, setData] = useState(DataSource.getBlogPost(id));
// Similar to componentDidMount and componentDidUpdate:
import React from 'react';
import { Redirect, Route } from 'react-router-dom';
import { checkAuthentication } from '../../store/selectors/user';
function withAuthRoute(checkAuth, pathname) {
return function AuthRoute({ component: Component, ...rest }) {
return (
<Route
{...rest}
render={props => {
@hckhanh
hckhanh / machine.js
Created September 26, 2019 16:01
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
import {
assign,
EventObject,
Machine,
send,
StateMachine,
StateSchema
} from "xstate";
import { getToken } from "../apis";
import LoginMachine from "./LoginMachine";